C CLR 中的多執行緒使用方法

2021-07-03 18:09:52 字數 2291 閱讀 5286

本文由monkey man 撰寫於 2015/7/10 0:41:33

在編寫大型程式時,將所有任務都放在一條執行緒上來完成並不是乙個明智的選擇,因為程式一旦卡死在某個環節或是發生了死迴圈,整個程式都會廢掉。所以適當的用多執行緒有利於程式的良好執行。

// [c++]

//我用的編譯環境是vs2010

//使用/clr選項編譯.

using namespace system;

using namespace system::threading;

// 簡單的多執行緒示例:在第二個執行緒中執行

//乙個公有的方法 threadproc.

public ref class threadexample

}

};int main()

console::writeline( "主線程: 呼叫 join(), 等待 threadproc 方法執行結束." );

othread->

join();

console::writeline( "主線程: threadproc->join() 已經返回控制權. 按任意鍵退出程式。" );

console::readline();

return

0; }

此**產生的輸出類似如下內容:

主線程: 開啟了第二個執行緒。

主線程: 做了些事情。

threadproc: 0

threadproc: 1

threadproc: 2

threadproc: 3

threadproc: 主線程: 做了些事情。

主線程: 做了些事情。

主線程: 做了些事情。

4threadproc: 5

threadproc: 6

threadproc: 7

threadproc: 8

threadproc: 9

主線程: 呼叫 join(), 等待 threadproc 方法執行結束.

主線程: threadproc->join() 已經返回控制權. 按任意鍵退出程式。

當然這裡所呈現的結果並不唯一,執行時機器的狀況和資源配置的狀況會使主線程和第二條執行緒的運**況發生變化。有時主線程會先執行完,然後等待第二個執行緒執行完;有時第二個執行緒會先執行完,然後主線程的輸出跟在後面;也有可能兩條執行緒的執行狀況都差不多(比如上面那個示例輸出。細心的人會發現第七行應該在同一行輸出的threadproc: 4被拆到了第七行和第十行)。下面我們再看兩組輸出:

情況一:主線程會先執行完,然後等待第二個執行緒執行完

主線程: 開啟了第二個執行緒。

主線程: 做了些事情。

主線程: 做了些事情。

主線程: 做了些事情。

主線程: 做了些事情。

主線程: 呼叫 join(), 等待 threadproc 方法執行結束.

threadproc: 0

threadproc: 1

threadproc: 2

threadproc: 3

threadproc: 4

threadproc: 5

threadproc: 6

threadproc: 7

threadproc: 8

threadproc: 9

主線程: threadproc->join() 已經返回控制權. 按任意鍵退出程式。

情況二:第二個執行緒先執行完,然後主線程的輸出跟在後面

主線程: 開啟了第二個執行緒。

主線程: 做了些事情。

threadproc: 0

threadproc: 1

threadproc: 2

threadproc: 3

threadproc: 4

threadproc: 5

threadproc: 6

threadproc: 7

threadproc: 8

threadproc: 9

主線程: 做了些事情。

主線程: 做了些事情。

主線程: 做了些事情。

主線程: 呼叫 join(), 等待 threadproc 方法執行結束.

主線程: threadproc->join() 已經返回控制權. 按任意鍵退出程式。

各位可以自己試一試,看看自己會產生那些執行結果(^ . ^)

參考:msdn文件

delphi中Thread執行緒的使用方法

tclientdatathread class tthread private public listbuffer tstringlist targetlist tstrings proceduresynchadddatatocontrol procedureshowme constructorcr...

專案裡多執行緒常用姿勢,很給力的使用方法

最近專案裡經常會有一部分大批量資料的校驗處理等對介面響應有要求的情景,這時候往往只能通過多執行緒的方式去處理請求,能達到快速響應 public class taskthreadpoolservice 多執行緒執行無返回值方法 可指定部分執行緒池引數 param voidtaskmethodintef...

多執行緒中的join 方法

直接看 package net.csdn.demo01 public class mythread extends thread package net.csdn.demo01 public class testmythread 執行結果 張三 1張三 2張三 3張三 4張三 5張三 6張三 7張三...