多執行緒程式設計之建立工作者執行緒

2021-06-29 04:22:48 字數 1259 閱讀 8070

由於之前專案用到了多執行緒,但每怎麼看msdn的文件,今天覆習便仔細看了下,全文翻譯如下:

工作者執行緒:

工作者執行緒通常用來在後台執行一些使用者不需要等待的任務,如一些比較耗時的數學計算(我專案中耗時的數學計算便是相機的標定,需要對乙個比較大的矩陣進行svd分解及其他運算)和後台列印等。

建立乙個工作者執行緒相對來說是乙個簡單的任務,只需要兩步就可以使你的執行緒工作起來:完成執行緒函式的編寫和開始執行緒的執行。

執行緒的開始:在這裡我們使用的是mfc裡提供的可以過載版本的afxbeginthread函式。一種版本用來建立工作者執行緒,另一種版本用來建立使用者介面執行緒。對於建立工作者執行緒來說需要給afxbeginthread傳遞以下引數:

1:執行緒控制函式的位址

2:傳遞給執行緒控制函式的引數(呼叫這自己決定需要傳遞給執行緒控制函式什麼引數)

3:執行緒的優先順序,預設的優先順序是正常,即被建立執行緒的優先順序和建立它的執行緒的優先順序相同。

4:分配給執行緒棧的大小,每乙個執行緒都有乙個自己專屬的棧,預設值是棧的大小和建立該它的執行緒的棧大小一樣。

5:執行緒是否立即執行,預設的引數為0即執行緒建立後立即執行。或者使用引數create_suspended,使執行緒建立後被掛起。

6:執行緒安全級別,預設的安全級別和父執行緒級別一樣。

函式afxbeginthread建立並初始化乙個cwinthread類的物件,並且啟動它,返回該物件的位址,以便稍後可以使用這個物件。

執行緒控制函式(執行緒要執行的**)的完成:一旦進入了這個函式,執行緒就開始了,退出了這個函式執行緒就終止了。執行緒函式的原型描述為

uint mycontrollingfunction(lpvoid pparam);

typedef void far      *lpvoid;//far只在16位機器下使用,用於擴充套件記憶體定址用,32位下就沒用了。

當執行緒函式結束時,它必須返回乙個uint型別的值來指示執行緒結束的原因。一般的,用返回值0代表執行緒的成功執行,其他值則代表不同的錯誤型別了。

下面是乙個例子:

uint mythreadproc( lpvoid pparam )

// inside a different function in the program..

.pnewobject = new cmyobject;

afxbeginthread(mythreadproc, pnewobject);//預設的一些引數可以省略不寫.

..

MFC工作者執行緒

工作者執行緒 1.在標頭檔案中新增uint threadfunc lpvoid lpparam 注意應在類的外部 2.新增protected型變數 cwinthread pthread 3.新增執行緒處理函式 uint threadfunc lpvoid lpparam return 0 4.開啟執...

執行緒池如何管理工作者執行緒

1.執行緒池的queueuserworkitem方法和timer類總把工作項放入全域性佇列中 2.工作者執行緒利用先進先出的原則從全域性佇列中取出工作項放入自己的本地佇列中,並處理他們 3.因為多個工作者執行緒要從同時從全域性佇列中取工作項,所以會有乙個執行緒同步鎖,保證所有工作者執行緒取出不同的工...

UI執行緒和工作者執行緒的訊息佇列

ui執行緒有視窗,視窗自建了訊息佇列。工作者執行緒初始狀態沒有自建訊息佇列。其實ui執行緒通常是指有createwindow createwindowex並處理訊息迴圈的執行緒,其實與是主線程還是工作執行緒沒有關係 只不過大部分程式是在主線程中處理ui訊息的並且只在該執行緒中處理ui訊息,因為涉及a...