win32多執行緒學習
1.執行緒建立
handle createthread(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.掛起指定執行緒:
dword suspendthread(handle hthread);
該函式用於掛起指定的執行緒,如果函式執行成功,則執行緒的執行被終止。
3、結束執行緒的掛起狀態:
dword resumethread(handle hthread);
該函式用於結束執行緒的掛起狀態,執行執行緒。
4、執行緒退出(退出自己)
void exitthread(dword dwexitcode);
5、退出其他執行緒
bool terminatethread(handle hthread,dword dwexitcode);
一般情況下,執行緒執行結束之後,執行緒函式正常返回,但是應用程式可以呼叫terminatethread強行終止某一線程的執行。
各引數含義如下:
hthread:將被終結的執行緒的控制代碼;
dwexitcode:用於指定執行緒的退出碼。
注意:使用terminatethread()終止某個執行緒的執行是不安全的,可能會引起系統不穩定;雖然該函式立即終止執行緒的執行,但並不釋放執行緒所占用的資源。因此,一般不建議使用該函式。
6、傳送訊息給執行緒:
bool postthreadmessage(dword idthread,
uint msg,
wparam wparam,
lparam lparam);
該函式將一條訊息放入到指定執行緒的訊息佇列中,並且不等到訊息被該執行緒處理時便返回。
idthread:將接收訊息的執行緒的id;
msg:指定用來傳送的訊息;
wparam:同訊息有關的字引數;
lparam:同訊息有關的長引數;
呼叫該函式時,如果即將接收訊息的執行緒沒有建立訊息迴圈,則該函式執行失敗 7.
注意:(1)
對於多執行緒引用的全域性變數來說,volatile是乙個非常重要的修飾符。
(2)執行緒函式的宣告應在類的外部
8.執行緒的暫時掛起:
dword waitforsingleobject(handle hhandle,dword dwmilliseconds);
hhandle為要監視的物件(一般為同步物件,也可以是執行緒)的控制代碼;
dwmilliseconds為hhandle物件所設定的超時值,單位為毫秒;
當在某一線程中呼叫該函式時,執行緒暫時掛起,系統監視hhandle所指向的物件的狀態。如果在掛起的dwmilliseconds毫秒內,執行緒所等待的物件變為有訊號狀態,則該函式立即返回;如果超時時間已經到達dwmilliseconds毫秒,但hhandle所指向的物件還沒有變成有訊號狀態,函式照樣返回。引數dwmilliseconds有兩個具有特殊意義的值:0和infinite。若為0,則該函式立即返回;若為infinite,則執行緒一直被掛起,
直到hhandle所指向的物件變為有訊號狀態時為止。
Win32建立多執行緒
win32建立多執行緒,貼下 define win32 lean and mean include include include include include include include include include define max threads 3 dword winapi pr...
win32多執行緒程式設計
使用3個執行緒完成6個任務,工作的執行是靠呼叫sleep 來模擬,時間長度是隨機給予的,只要乙個執行緒結束,就會有另乙個執行緒被產生。taskques.cpp 定義控制台應用程式的入口點。include stdafx.h include include include define win32 le...
Win32 多執行緒程式設計
程序和執行緒都是作業系統的概念 程序是應用程式的執行例項 每個程序是由私有的虛擬位址空間 資料和其它各種系統資源組成 程序在執行過程中建立的資源隨著程序的終止而被銷毀 所使用的系統資源在程序終止時被釋放或關閉 執行緒是程序內部的乙個執行單元 系統建立好程序後 實際上就啟動執行了該程序的主執行執行緒 ...