Windows下多執行緒常用函式

2021-07-04 19:29:04 字數 2972 閱讀 5290

分類: 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 多執行緒同步

程式 是計算機指令的集合,它以檔案的形式儲存在磁碟上。而程序通常被定義為乙個正在執行程式的例項,是乙個程式在其自身位址空間的依次執行活動。程序 執行緒 由執行緒的核心物件和執行緒棧組成 當多執行緒訪問全域性變數時需要多執行緒同步 互斥物件 事件物件 關鍵 段 互斥物件 互斥獨享可以看做是一把房間鑰匙...