分類: c++
ui多執行緒
2011-11-03 16:13
594人閱讀收藏
舉報windows
attributes
winapi
null
security
多執行緒
1.執行緒建立
該函式在其呼叫程序的程序空間裡建立乙個新的執行緒,並返回已建執行緒的控制代碼。
handle createthread(lpsecurity_attributeslpthreadattributes, dworddwstacksize, lpthread_start_routinelpstartaddress, lpvoidlpparameter, dworddwcreationflags, lpdwordlpthreadid);
其中各引數說明如下:
lpthreadattributes:指向乙個 security_attributes 結構的指標,該結構決定了執行緒的安全屬性,一般置為 null;
dwstacksize:指定了執行緒的堆疊深度,一般都設定為0,表示執行緒堆疊大小與建立它的執行緒相同;
一般情況為(lpthread_start_routine)threadfunc,threadfunc 是執行緒函式名,函式原型如下:
dword winapi threadfunc(lpvoid param);
lpparameter:指定了執行緒執行時傳送給執行緒的32位引數,即執行緒函式的引數;
dwcreationflags:控制線程建立的附加標誌,可以取兩種值:如果該引數為0,執行緒在被建立後就會立即開始執行;如果該引數為create_suspended,則系統產生執行緒後,該執行緒處於掛起狀態,並不馬上執行,直至函式resumethread被呼叫;
lpthreadid:該引數返回所建立執行緒的id;
2.執行緒懸掛和恢復
建立新的執行緒後,該執行緒就開始啟動執行。但如果在dwcreationflags中使用了create_suspended特性,執行緒並不馬上執行,而是先掛起,等到呼叫resumethread後才開始啟動執行緒。
dword suspendthread(handle hthread);
//該函式用於掛起指定的執行緒,如果函式執行成功,則執行緒的執行被終止。
dword resumethread(handle hthread);
//該函式用於結束執行緒的掛起狀態,執行執行緒。
3.執行緒優先順序操作
int getthreadpriority(handle hthread);
//呼叫該函式得到執行緒優先權。
bool setthreadpriority(handle hthread,int npriority);
//呼叫該函式來設定執行緒的優先權。
4.執行緒退出
當呼叫執行緒的函式返回後,執行緒自動終止。
void exitthread(dword dwexitcode);
bool terminatethread(handle hthread,dword dwexitcode);
注意:
(1)terminatethread函式可能會引起系統不穩定,而且執行緒所占用的資源也不釋放。因此,一般情況下,建議不要使用該函式。
(2)如果要終止的執行緒是程序內的最後乙個執行緒,則執行緒被終止後相應的程序也應終止。
(3)釋放資源後,將執行緒handle置成null。
(4)使用terminatethread後,需呼叫closehandle( )函式釋放執行緒所占用的堆疊。
程序間通訊
1.全域性變數方式:
(1)程序和執行緒共享全域性變數,可利用該全域性變數達到通訊的目的。
(2)將程序的hadnle作為引數傳遞給執行緒函式,然後執行緒可根據此handle對程序的變數進行操作。
2.訊息通訊方式:
bool postmessage(hwnd hwnd, uint msg, wparam wparam, lparam lparam);
bool postthreadmessage(hwnd hwnd, uint msg, wparam wparam, lparam lparam);
顯然它們傳送到的物件不同:postmessage發訊息給視窗,postthreadmessage發訊息給執行緒。且當postthreadmessage的hwnd = null時,表明該訊息傳遞給當前執行緒本身。
bool postmessage( uint message, wparam wparam = 0, lparam lparam =0 );
返回值如果公布了訊息,則返回非零值;否則返回0。
引數message指定了要公布的訊息。
wparam指定了附加的訊息資訊。這個引數的內容依賴於要公布的訊息。
lparam指定了附加的訊息資訊。這個引數的內容依賴於要公布的訊息。
說明:這個函式將乙個訊息放入視窗的訊息佇列,然後直接返回,並不等待對應的視窗處理訊息。訊息佇列中的訊息是通過呼叫windows的getmessage或peekmessage函式來獲得的。可以通過windows的postmessage函式來訪問其它應用程式。
bool postthreadmessage( uint message , wparam wparam, lparamlparam );返回值如果成功,則返回非零值;否則返回0。
引數message使用者自定義訊息的id。
wparam第乙個訊息引數。
lparam第二個訊息引數。
說明:呼叫這個函式以向其它cwinthread物件傳送乙個使用者自定義訊息。傳送的訊息通過訊息對映巨集on_thread_message被對映到適當的訊息處理函式。
3.同步方式:具體參見
Windows多執行緒函式
1 在windows環境下,win32提供了一系列的api函式來完成執行緒的建立 掛起 恢復 終結以及通訊的工作,主要的函式列表如下 序號函式名 功能createthread 建立乙個新執行緒 exitthread 正常結束乙個執行緒的執行 terminatethead 強制終止乙個執行緒的執行 r...
windows下C多執行緒
看到乙個簡單的windows程式設計例項,給大家分享一下 這個例項主要用createthread為乙個宣告的方法建立乙個程序,這個被建立的方法必須用dword winapi 修飾,需要有lpvoid 型別的引數,如果沒有這個引數,在建立程序時要對這個方法強制型別中轉換 dword winapi my...
Windows下C 多執行緒同步
程式 是計算機指令的集合,它以檔案的形式儲存在磁碟上。而程序通常被定義為乙個正在執行程式的例項,是乙個程式在其自身位址空間的依次執行活動。程序 執行緒 由執行緒的核心物件和執行緒棧組成 當多執行緒訪問全域性變數時需要多執行緒同步 互斥物件 事件物件 關鍵 段 互斥物件 互斥獨享可以看做是一把房間鑰匙...