為了防止應用程式崩潰可以在可能發生異常的地方捕獲異常。可能在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...