學習MFC多執行緒

2021-07-09 08:13:01 字數 1958 閱讀 5607

2023年1月7日

好吧,終於又要學習mfc了,唉,希望這次能吧mfc多執行緒學會。多謝dgp的程式

首先在了解一下控制代碼吧:

1.在threadfunc()裡,對外部的控制項進行控制;當然還有其他的方法。

time=ctime::getcurrenttime();

strtime=time.format("%h:%m:%s"); //

::setdlgitemtext(afxgetmainwnd()->m_hwnd,idc_time,strtime);

2. win32 提供了一系列的api函式來完成執行緒的建立、掛起、恢復、終結以及通訊等工作。下面將選取其中的一些重要函式進行說明。

(1)handlecreatethread(

lpsecurity_attributes lpthreadattributes,

dword dwstacksize,

lpthread_start_routine lpstartaddress,

lpvoid lpparameter,

dword dwcreationflags, 

lpdword lpthreadid);

該函式在其呼叫程序的程序空間裡建立乙個新的執行緒,並返回已建執行緒的控制代碼,其中各引數說明如下:

lpthreadattributes:指向乙個security_attributes 結構的指標,該結構決定了執行緒的安全屬性,一般置為 null; 

dwstacksize:指定了執行緒的堆疊深度,一般都設定為0; 

lpstartaddress:表示新執行緒開始執行時**所在函式的位址,即執行緒的起始位址。一般情況為(lpthread_start_routine)threadfunc,threadfunc 是執行緒函式名; 

lpparameter:指定了執行緒執行時傳送給執行緒的32位引數,即執行緒函式的引數; 

dwcreationflags:控制線程建立的附加標誌,可以取兩種值。如果該引數為0,執行緒在被建立後就會立即開始執行;如果該引數為create_suspended,則系統產生執行緒後,該執行緒處於掛起狀態,並不馬上執行,直至函式resumethread被呼叫; 

lpthreadid:該引數返回所建立執行緒的id; 

如果建立成功則返回執行緒的控制代碼,否則返回null。

(2) dwordsuspendthread(handle hthread); 該函式用於掛起指定的執行緒,如果函式執行成功,則執行緒的執行被終止。

(3) dwordresumethread(handle hthread); 該函式用於結束執行緒的掛起狀態,執行執行緒。

(5) boolterminatethread(handle hthread,dword dwexitcode);   一般情況下,執行緒執行結束之後,執行緒函式正常返回,但是應用程式可以呼叫terminatethread強行終止某一線程的執行。各引數含義如下:

hthread:將被終結的執行緒的控制代碼;

dwexitcode:用於指定執行緒的退出碼。   

使用terminatethread()終止某個執行緒的執行是不安全的,可能會引起系統不穩定;雖然該函式立即終止執行緒的執行,但並不釋放執行緒所占用的資源。因此,一般不建議使用該函式。 

(6) boolpostthreadmessage(

dword idthread,   

uint msg,   

wparam wparam,   

lparam lparam);

該函式將一條訊息放入到指定執行緒的訊息佇列中,並且不等到訊息被該執行緒處理時便返回。 idthread:將接收訊息的執行緒的id; 

msg:指定用來傳送的訊息; 

wparam:同訊息有關的字引數;

lparam:同訊息有關的長引數; 

呼叫該函式時,如果即將接收訊息的執行緒沒有建立訊息迴圈,則該函式執行失敗。

其實自己是用dgp給的乙個文件學習的。

多執行緒MFC

csemaphore semaphorewrite 2,2 資源最多訪問執行緒2個,當前可訪問執行緒數2個 cwinthread pwritea afxbeginthread writea,m ctrla,thread priority normal,0,create suspended pwrit...

MFC多執行緒

如果使用者的應用程式需要有多個任務同時進行相應的處理,則使用多執行緒是較理想的選擇。多執行緒對於網路,列印,字處理,圖形影象,動畫和檔案管理的同乙個系統下執行來說,是非常必要的。在乙個多執行緒程式中,程序必須有乙個主線程,主線程可以在任何需要的時候建立新的執行緒。所有活動的縣城共享程序的資源。解決多...

MFC多執行緒

例項一參考資料 uint threadfun lpvoid pparam afxbeginthread threadfun,null 這就是建立乙個執行緒並執行了,呼叫上面的函式彈出乙個對話方塊.void cmultithread7dlg onsum cwinthread afxbeginthrea...