handle createevent(
lpsecurity_attributes lpeventattributes, // 安全屬性 null時為系統預設
bool bmanualreset, // true 通過呼叫resetevent將事件物件標記為未通知
bool binitialstate, // true 已通知狀態 false未通知狀態
lpctstr lpname // 物件名稱 以null結尾的字串
);
控制事件
bool setevent(handle hevent);
例項**
hwnd hedit1;
hwnd hedit2;
hwnd hedit3;
hwnd hedit4;
handle hthread1;
handle hthread2;
handle hthread3;
handle hthread4;
dword winapi threadproc1(lpvoid lpparameter)
dword winapi threadproc2(lpvoid lpparameter)
; //當事件變成已通知時
waitforsingleobject(g_hevent, infinite);
//讀取內容
getwindowtext(hedit1, szbuffer, 10);
setwindowtext(hedit2, szbuffer);
return 0;
}dword winapi threadproc3(lpvoid lpparameter)
; //當事件變成已通知時
waitforsingleobject(g_hevent, infinite);
//讀取內容
getwindowtext(hedit1, szbuffer, 10);
setwindowtext(hedit3, szbuffer);
return 0;
}dword winapi threadproc4(lpvoid lpparameter)
; //當事件變成已通知時
waitforsingleobject(g_hevent, infinite);
//讀取內容
getwindowtext(hedit1, szbuffer, 10);
setwindowtext(hedit4, szbuffer);
return 0;
}
事件達到執行緒同步
//事件和臨界區
handle g_hset, g_hclear;
int g_max = 10;
int g_number = 0;
//生產者執行緒函式
dword winapi threadproduct(lpvoid pm)
return 0;
}//消費者執行緒函式
dword winapi threadconsumer(lpvoid pm)
return 0;
}int main(int argc, char* argv)
handle createsemaphore(
lpsecurity_attributes lpsemaphoreattributes, //安全控制,一般直接傳入null。
long linitialcount, //初始資源數量。0時不傳送訊號
long lmaximumcount, //最大併發數量。linitialcount<=lmaximumcount
lpctstr lpname //訊號量的名稱,傳入null表示匿名信號量
);
#include "stdafx.h"
#include "resource.h"
handle hsemaphore;
handle hthread[3];
hwnd heditset;
hwnd hedit1;
hwnd hedit2;
hwnd hedit3;
dword winapi threadproc1(lpvoid lpparameter)
releasesemaphore(hsemaphore, 1, null);
return 0;
}dword winapi threadproc2(lpvoid lpparameter)
releasesemaphore(hsemaphore, 1, null);
return 0;
}dword winapi threadproc3(lpvoid lpparameter)
releasesemaphore(hsemaphore, 1, null);
return 0;
}dword winapi threadbegin(lpvoid lpparameter)
releasesemaphore(hsemaphore, 2, null);
::waitformultipleobjects(3, hthread, true, infinite);
::closehandle(hsemaphore);
return 0;
}bool callback maindlgproc(hwnd hdlg, uint umsg, wparam wparam, lparam lparam)
case wm_initdialog:
case wm_command:
switch (loword(wparam))
}break;
} return bret;
}int apientry winmain(hinstance hinstance,
hinstance hprevinstance,
lpstr lpcmdline,
int ncmdshow)
linux多執行緒學習 四 訊號量執行緒控制
pv原語是對整數計數器訊號量sem的操作,一次p操作可使sem減一,而一次v操作可是sem加一。程序 或執行緒 根據訊號量的值來判斷是否對公共資源具有訪問許可權。當訊號量的值大於零或等於零的時候,該程序 或執行緒 具有對公共資源訪問的許可權,否則,當訊號量的值小於時,該程序 或執行緒 就會被阻塞,直...
linux多執行緒學習 五 訊號量執行緒控制
pv原語是對整數計數器訊號量sem的操作,一次p操作可使sem減一,而一次v操作可是sem加一。程序 或執行緒 根據訊號量的值來判斷是否對公共資源具有訪問許可權。當訊號量的值大於零或等於零的時候,該程序 或執行緒 具有對公共資源訪問的許可權,否則,當訊號量的值小於時,該程序 或執行緒 就會被阻塞,直...
執行緒的 事件 和 訊號量
事件 event 用如下語句建立 handle m hevent createevent null,true,false,null setevent m hevent 函式 resetevent m hevent 函式分別將事件物件置為有訊號狀態和無訊號狀態。訊號量 semaphore 用如下語句建...