windows多執行緒(七) 事件event

2022-02-22 08:10:02 字數 1436 閱讀 9128

前面說的互斥量mutex與關鍵段criticalsection都不能實現執行緒的同步,只能實現互斥,接下來我們用時間event就可以實現執行緒的同步了,事件也是乙個核心物件。

(一) 建立事件

1.函式原型

handle winapi createeventw(

_in_opt_ lpsecurity_attributes lpeventattributes,

_in_ bool bmanualreset,

_in_ bool binitialstate,

_in_opt_ lpcwstr lpname

);

2.引數說明

(二) 開啟事件

1.函式原型

handle winapi openeventw(

_in_ dword dwdesiredaccess,

_in_ bool binherithandle,

_in_ lpcwstr lpname

);

2.引數說明

(三) 觸發事件

1.函式原型

bool winapi setevent(

_in_ handle hevent

);

2.引數說明

(四)、 將事件設為末觸發

1.函式原型

bool winapi resetevent(

_in_ handle hevent

);

2.引數說明前面我們用關鍵段和互斥量無法實現執行緒同步,在前面的程式中,我們可以實現對全域性資源互斥訪問,即每個執行緒給全域性資源加一,現在使用事件可以時間執行緒同步,即實現每個執行緒按順序依次給全域性資源加一,**如下:

//使用事件進行執行緒同步

#include#include using namespace std;

critical_section g_csvar;

handle g_event;

const int thread_num = 10;

int g_num = 0;

dword winapi func(lpvoid);

int main()

waitformultipleobjects(thread_num, handle, true, infinite);

closehandle(g_event);

deletecriticalsection(&g_csvar);

return 0;

}dword winapi func(lpvoid p)

執行結果如下所示:

多執行緒 事件機制

多執行緒 事件機制 即執行緒b的啟動需要等待執行緒a的某個訊號,如果等待到資訊則開始執行,如下,摘自 精通windows api 精通windows api 示例 event.c 7.2.1 演示使用event同步執行緒 標頭檔案 include include 常量定義 define numthr...

多執行緒學習(七)

問題 1.賣票系統 如果每個執行緒執行的 相同,可以使用同乙個runnable物件,這個runnable物件中有那個共享資料 解決public class multithreadsharedatastudy class ticketsystem implements runnable 2.設計4個執...

Windows多執行緒程式設計

一 問題的提出 編寫乙個耗時的單執行緒程式 新建乙個基於對話方塊的應用程式singlethread,在主對話方塊idd singlethread dialog新增乙個按鈕,id為idc sleep six second,標題為 延時6秒 新增按鈕的響應函式,如下 void csinglethread...