Win32 3 執行緒控制 事件 訊號量

2021-08-30 08:27:56 字數 3303 閱讀 9280

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 用如下語句建...