事件核心物件
1. 手動重置事件:當乙個手動重置事件被觸發的時候,所有等待該事件的執行緒都變為可排程狀態。所以要注意此時所有的執行緒都只能以唯讀的方式來訪問記憶體,這也是多個執行緒能夠同時執行的唯一原因
2. 自動重置事件:當乙個自動重置事件被觸發的時候,只有乙個等待該事件的執行緒都變為可排程狀態(當執行緒成功等到事件觸發的時候,會自動的把事件重置為未觸發狀態),其餘的繼續等待。
建立乙個事件核心物件
handle createevent(
lpsecurity_attributes lpeventattributes,
bool bmanualreset, //true:手動重置事件; false:自動重置事件
bool binitialstate, //true:事件初始化為觸發狀態; false:事件初始化為未觸發狀態
lpcstr lpname
);
開啟乙個事件核心物件
其他程序中的執行緒要訪問該事件物件可以呼叫openevent
handle openevent(
dword dwdesiredaccess,
bool binherithandle,
lpcstr lpname
);
改變事件觸發狀態
bool setevent(handle hevent); // 把事件變為觸發狀態
bool resetevent(handle hevent); // 把事件變為未觸發狀態
關閉事件物件
當不在需要事件物件時,要呼叫closehandle來將它關閉
bool closehandle(handle hobject);
手動重置事件例子
#include "stdafx.h"
#include
#include
#include
using namespace std;
int g_x = 0;
handle g_hevent;
// 執行緒唯讀
uint winapi threadfunc1(pvoid parguments)
// 執行緒唯讀
uint winapi threadfunc2(pvoid parguments)
// 執行緒唯讀
uint winapi threadfunc3(pvoid parguments)
int _tmain(int argc, _tchar* argv)
自動重置事件例子
// threaddemo.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//#include "stdafx.h"
#include
#include
#include
using namespace std;
int g_x = 0;
handle g_hevent;
// 寫入執行緒
uint winapi threadfunc1(pvoid parguments)
// 當執行緒結束,要釋放資源,故把事件物件重置為觸發狀態,以便等待該資源的其他執行緒訪問
setevent(g_hevent);
_endthreadex(0);
return0;}
// 讀執行緒
uint winapi threadfunc2(pvoid parguments)
// 寫入執行緒
uint winapi threadfunc3(pvoid parguments)
setevent(g_hevent);
_endthreadex(0);
return0;}
int _tmain(int argc, _tchar* argv)
執行緒同步 核心物件實現執行緒同步 事件核心物件
1 事件核心物件23 事件型別物件有兩種不同型別,手動重置和自動重置 4手動重置 當乙個手動重置物件被觸發時候,等待該物件的所有執行緒變為可排程。5自動重置 當乙個自動重置物件被觸發時,只有乙個等待該事件的執行緒會變為可排程67 下面是乙個建立事件核心物件的函式 8handle createeven...
執行緒與事件核心物件的同步
1.建立事件核心物件 handle createevent psecurity attributes psa,bool fmenureset,bool finitialstate,pctstr pszname 從引數的名字上我們可以大概的猜出他們的意思 1參 核心物件的建立一般都有這個屬性 設定核心...
核心物件執行緒同步 信標核心物件
信標核心物件用於對資源進行計數。乙個使用數量 乙個是最大資源數量 用於標識信標能夠控制的資源的最大數量 乙個是當前資源數量 用於標識當前可以使用的資源的數量 如果當前資源的數量大於0,則發出信標訊號。如果當前資源數量是0,則不發出信標訊號。系統決不允許當前資源的數量為負值。當前資源數量決不能大於最大...