用核心物件進行執行緒同步 事件核心物件

2021-08-05 22:12:11 字數 2121 閱讀 6330

事件核心物件

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,則不發出信標訊號。系統決不允許當前資源的數量為負值。當前資源數量決不能大於最大...