使用C 多執行緒程式(2)

2021-05-21 17:57:50 字數 4153 閱讀 1024

為了防止應用程式崩潰可以在可能發生異常的地方捕獲異常。可能在sleep方法中丟擲異常,可以用try來捕獲所有的異常。

program 9

using system;

using system.threading;

using system.security;

public class mythread catch (argumentexception ae) catch (threadinterruptedexception tie) catch (securityexception se) }

} }

public class myclass }

這個程式捕獲了三個異常。看這段**的第一行。多用了乙個命名空間:system.security。securityexception異常類定義在這個命名空間。

在建立執行緒例項的方法中為執行緒命名。可以通過currentthread獲得執行緒的名稱。currentthread是執行緒類的靜態方法。當呼叫者不適合安全訪問這個屬性丟擲的乙個異常:securityexception。

程式的執行結果:

before start thread

thread 1=0

thread 2=0

thread 1=1

thread 2=1

thread 1=2

thread 2=2

thread 1=3

thread 2=3

thread 1=4

thread 2=4

thread 1=5

thread 2=5

thread 1=6

thread 2=6

thread 1=7

thread 2=7

thread 1=8

thread 2=8

thread 1=9

thread 2=9

可以使用abort()終止執行緒。abort有兩個過載方法。第乙個是執行沒有引數的方法,第二個是帶有object引數的方法。這個方法丟擲

threadabortexception異常沒有**獲。看下面的程式:

program 10

using system;

using system.threading;

using system.security;

public class mythread catch (argumentexception ae) catch (threadinterruptedexception tie) catch (securityexception se) }}

}public class myclass catch (threadabortexception tae)

console.writeline("end of main");}}

程式輸出:

before start thread

end of main

這個輸出結果很明顯的表面執行緒沒有執行。乙個執行緒終止後就不能在開始。看下面的程式。

program 11

using system;

using system.threading;

public class mythread

}

}

public class myclass

}

這個程式丟擲乙個system.threading.threadstateexception異常。現在使用異常捕獲後關閉程式而不是用異常終止。

program 12

using system;

using system.threading;

public class mythread }

}public class myclass catch (threadstateexception te)

tid1.abort();

tid2.abort();

try catch (threadstateexception te)

console.writeline("end of main"); }

}這裡捕獲threadstatexception異常並用這個類的tostring方法。tostring方法返回乙個異常的全綴名,和可能的錯誤資訊,異常內部名和堆跟蹤資訊。

可以用join方法來等待終端的執行緒。這個方法有三個過載方法。第乙個沒有引數等待仍然逝去的執行緒,第二個是帶有乙個int引數在期待的時間內等待逝去的執行緒,第三個是帶timespan結果的引用,看下面的程式。

program 13

using system;

using system.threading;

public class mythread }

}public class myclass catch (threadstateexception te)

tid1.join();

tid2.join(new timespan(0, 0, 1) );

console.writeline("end of main"); }

}程式等等第乙個執行緒知道他完成為止第二個執行緒等待1秒。

執行緒執行有兩種方法:後台和前台。當應用程式終止時後台執行緒完成,另乙個前台執行緒不等的應用程式終止。設定執行緒執行使用isbackground屬性。下面程式顯示了這個用法。

program 14

using system;

using system.threading;

public class mythread }

}public class myclass catch (threadstateexception te)

thread.sleep(10);

console.writeline("end of main"); }

}程式輸出:

before start thread

thread 1=0

thread 2=0

thread 1=1

thread 2=1

end of main

輸出顯示當應用程式終止時兩個背景執行緒也都終止。

也可以為執行緒設定優先權。可以使用thread類的threadpriority屬性來設定執行緒的優先順序。下面程式顯示使用執行緒的屬性設定有效級。

program 15

using system;

using system.threading;

public class mythread }

}public class myclass catch (threadstateexception te)

tid1.join();

tid2.join();

console.writeline("end of main"); }

}執行緒1的優先順序是highest執行緒2是lowest。另外執行緒的優先順序是abovenormal, belownormal 和 normal.

getdomain()方法返回執行緒執行的執行檔案的名。這個靜態方法使用類名來訪問。

program 16

using system;

using system.threading;

public class mythread }

}public class myclass }

程式輸出結果:

before start thread

name: prog16.exe

no context policies. 0

1 23 4

5 67 8

9這裡介紹了c#多執行緒程式。

使用C 多執行緒程式(2)

為了防止應用程式崩潰可以在可能發生異常的地方捕獲異常。可能在sleep方法中丟擲異常,可以用try來捕獲所有的異常。program 9 using system using system.threading using system.security public class mythread ca...

c 多執行緒2

for int i 0 i 100000 i 這麼一段 放在程式裡的那簡直頁面會卡出蛇精病,怎麼辦呢,用多執行緒試試 private void button1 click object sender,eventargs e private void er 頁面 呵呵呵,愚蠢人類,卡死你了吧。窩 媽蛋...

C 多執行緒程式C

include include using namespace std 因為要訪問windows api函式,所以要包含windows.h標頭檔案。dword winapi fun1proc lpvoid lpparameter thread data void main handle hthrea...