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...