多執行緒程式設計(三) AfxBeginThread

2021-06-16 04:56:49 字數 1341 閱讀 6851

在mfc中,我們可以用到的乙個api是afxbeginthread,它的函式宣告原型如下:

這兩個函式中,第乙個可以建立乙個使用者工作執行緒,第二個可以建立乙個使用者介面執行緒。引數說明如下:

pfnthreadproc:指向工作執行緒的函式位址,函式格式為uint __cdecl mycontrollingfunction( lpvoid pparam );

pthreadclass:使用者介面執行緒類,一般是從cwinthread繼承而來

pparam:需要傳給執行緒的引數

npriority:優先順序屬性識別符號,詳見setthreadpriority 中對其的描述,一般可設為null

nstacksize:執行緒棧大小,如果設定為0的話,就和建立執行緒棧大小一樣

dwcreateflags:建立識別符號,如果設為create_suspended,執行緒在建立之後會掛起,期間你可以初始化一些變數之類的東西,它會等待直到你呼叫了cwinthread::resumethread後才繼續執行。如果設定為0則執行緒建立之後立即執行。lpsecurityattrs:安全屬性識別符號,可參看security_attributes 結構體例項化它,一般情況下可以設定為null,表示使用和建立執行緒相同的安全屬性。

由msdn可以看到,這個函式仍然也是呼叫了createthread函式來建立執行緒的,它與createthread不同的地方是它也如c++執行庫中的_beginthread一樣,需要做一些初始化工作,所以,在mfc的程式中,他的操作性要比createthread容易一些,不容易出錯。

對於執行緒的終止和返回,可以參看

多執行緒程式設計(一)——createthread 和msdn中的說明,此處不在做過多解釋。

下面舉例說明用法:

userinte***cethread.h

userinte***cethread.cpp

afxthreading.h

afxthreading.cpp

應當注意的是,在建立使用者介面執行緒的時候,必須首先從 cwinthread 派生類。必須使用 declare_dyncreate 和 implement_dyncreate 巨集宣告並實現此類。此類必須重寫某些函式(initinstance ),也可以重寫其他函式(exitinstance )。詳情參看msdn中《多執行緒處理:建立使用者介面執行緒》一文。

多執行緒程式設計 三

放入資料 獲取資料 arrayblockingqueu 和 linkedblockingqueue arrayblockingqueu 是用陣列實現的有界阻塞佇列,並按照先進先出 fifo 的原則對元素進行排序。第乙個引數是容量 第二個引數是是否要保證執行緒的公平地訪問佇列 預設是false arr...

多執行緒程式設計(三)

1 執行緒池 防止大量執行非同步任務時,頻繁的建立和銷毀執行緒物件帶來的系統開銷 根據執行緒池型別的不同可以有效防止系統中的執行緒資源消耗過多 2 執行緒池核心引數 corepoolsize 執行緒池核心執行緒個數 包括空閒執行緒 maximunpoolsize 執行緒池中線程的最大數量 workq...

多執行緒程式設計(三)

條件變數 mutex my mutex condition variable my cond unique lockul my mutex mycond.wait ul,lambda表示式或者可呼叫物件 條件變數需要繫結到unique lock上,wait的作用是,如果第二個引數的返回值是true,...