初探c#多執行緒程式設計
以前在使用vb來實現多執行緒的時候,發現有一定的難度。雖然也有這樣那樣的方法,但都不盡人意,但在c#中,要編寫多執行緒應用程式卻相當的簡單。這篇文章將作簡要的介紹,以起到拋磚引玉的作用!
.net將關於多執行緒的功能定義在system.threading名字空間中。因此,要使用多執行緒,必須先宣告引用此名字空間(using system.threading;)。
即使你沒有編寫多執行緒應用程式的經驗,也可能聽說過「啟動執行緒」「殺死執行緒」這些詞,其實除了這兩個外,涉及多執行緒方面的還有諸如「暫停執行緒」「優先順序」「掛起執行緒」「恢復執行緒」等等。下面將乙個乙個的解釋。
a.啟動執行緒
顧名思義,「啟動執行緒」就是新建並啟動乙個執行緒的意思,如下**可實現:
thread thread1 = new thread(new threadstart( count));
其中的 count 是將要被新執行緒執行的函式。
b.殺死執行緒
「殺死執行緒」就是將一線程斬草除根,為了不白費力氣,在殺死乙個執行緒前最好先判斷它是否還活著(通過 isalive 屬性),然後就可以呼叫 abort 方法來殺死此執行緒。
c.暫停執行緒
它的意思就是讓乙個正在執行的執行緒休眠一段時間。如 thread.sleep(1000); 就是讓執行緒休眠1秒鐘。
d.優先順序
這個用不著解釋了。thread類中有乙個threadpriority屬性,它用來設定優先順序,但不能保證作業系統會接受該優先順序。乙個執行緒的優先順序可分為5種:normal, abovenormal, belownormal, highest, lowest。具體實現例子如下:
thread.priority = threadpriority.highest;
e.掛起執行緒
thread類的suspend方法用來掛起執行緒,知道呼叫resume,此執行緒才可以繼續執行。如果執行緒已經掛起,那就不會起作用。
if (thread.threadstate = threadstate.running)
f.恢復執行緒
用來恢復已經掛起的執行緒,以讓它繼續執行,如果執行緒沒掛起,也不會起作用。
if (thread.threadstate = threadstate.suspended)
下面將列出乙個例子,以說明簡單的執行緒處理功能。此例子來自於幫助文件。
using system;
using system.threading;
// ****** threading scenario: start a static method running
// on a second thread.
public class threadexample ", i);
// yield the rest of the time slice.
thread.sleep(0);}}
public static void main()
console.writeline("main thread: call join(), to wait until threadproc ends.");
t.join();
console.writeline("main thread: threadproc.join has returned. press enter to end program.");
console.readline();}}
此**產生的輸出類似如下內容:
main thread: start a second thread.
main thread: do some work.
threadproc: 0
main thread: do some work.
threadproc: 1
main thread: do some work.
threadproc: 2
main thread: do some work.
threadproc: 3
main thread: call join(), to wait until threadproc ends.
threadproc: 4
threadproc: 5
threadproc: 6
threadproc: 7
threadproc: 8
threadproc: 9
main thread: threadproc.join has returned. press enter to end program.
在開發中經常會遇到執行緒的例子,如果某個後台操作比較費時間,我們就可以啟動乙個執行緒去執行那個費時的操作,同時程式繼續執行。在某些情況下可能會出現多個執行緒的同步協同的問題,下面的例子就展示了在兩個執行緒之間如何協同工作。
這個程式的思路是共同做一件事情(從乙個arraylist中刪除元素),如果執行完成了,兩個執行緒都停止執行。
**如下:
public class threaddemo
public threaddemo(int number)
threadone = new thread(new threadstart(run));//兩個執行緒共同做一件事情
threadtwo = new thread(new threadstart(run));//兩個執行緒共同做一件事情
threadone.name = "執行緒1";
threadtwo.name = "執行緒2";
onnumberclear += new eventhandler(threaddemo_onnumberclear);
}///
/// 開始工作
///
public void action()
///
/// 共同做的工作
///
private void run()
monitor.exit(this);//取消鎖定
thread.sleep(5);}}
//執行完成之後,停止所有執行緒
void threaddemo_onnumberclear(object sender, eventargs e)
}
c 多執行緒程式設計初探
多程序就是跑了乙個main函式,直到結束 多執行緒就是在跑這個程序的過程中,把一條河流截成很多條小溪,可以相互通訊,共享變數等。c 11 新標準中引入了五個標頭檔案來支援多執行緒程式設計,它們分別是,和。該頭文主要宣告了兩個類,std atomic 和 std atomic flag,另外還宣告了一...
c 多執行緒程式設計 初探
c 多執行緒併發可以幫助我們挖掘cpu的效能,在我們的思想中,似乎程式都是順序執行的。這樣的結論是建立在 程式是單執行緒程式。比如我們平時寫的hello world程式 但是如果程式是多執行緒的。那麼這個結論就不成立了。先上 1 include 2 include 3 include 4 5void...
C語言多執行緒程式設計初探 MinGW pthread
將dll x86下的pthreadgc2.dll和pthreadgce2.dll拷貝到mingw的bin資料夾下 將include資料夾下的pthread.h sched.h和semaphore.h拷貝到mingw的include資料夾下 還有將lib x86下的libpthreadgc2.a和li...