第⑧章 线程与基础对象的一起(2)

 

② 、事件基本对象

事件基本对象是装有的木本对象中最宗旨的目的。包括贰个利用计数(与具有内核查象一样) ,贰个用于指明该事件是全自动重置的风云依然人工重置的风云的布尔值。多少个用以指明该事件高居已通报状态依然未公告状态的布尔值。

事件基本对象的体系:

人造重置的事件基本对象,事件获得关照时,等待该事件的保无线程均成为可调度线程。

自行重置的轩然大波基本对象,事件获得公告时,等待该事件的线程中惟有二个线程变为可调度线程。

事件的利用(二个线程执行伊始化操作,然后布告另1个线程执行剩余操作时用得最多)

事件起先化为未布告状态,然后,当该线程达成它的早先化操作后,它就将事件设置为已布告状态。那时,一向在伺机该事件的另七个线程发现该事件已经获得公告,由此它就变成可调度线程。那第叁个线程知道第③个线程已经形成了它的操作。

  1. 开创事件基本对象:

HANDLE CreateEvent(PSECURITY_ATTRIBUTES psa, BOOL fManualReset,

BOOL fInitialState,
PCTSTR pszName);

psa指向SECURITY_ATT凯雷德IBUTES结构的指针,明确重回的句柄是或不是可被子进度继续。假使是NULL此句柄不可能被一连。

f马努alReset钦定事件指标的种类,TRUE(人工重置的风浪)FALSE(自动重置的风云)。fInitialState钦点事件起先化为已通报状态(TRUE),还是未通报状态(FALSE)。

pszName钦命事件目的的名字,假设与三个留存的命名的风云目的的称呼一致,函数将呼吁EVENT_ALL_ACCESS来访问存在的对象。那时候,由于f马努alReset和fInitialState这五个参数将被忽视。尽管psa不是NULL,将明确此句柄是还是不是足以被持续,可是其安全描述符成员将被忽视。

 要是lpName为NULL,将创设1个默默的轩然大波目的。假如lpName的和二个存在的信号、互斥、等待计时器、作业还是是文本映射对象名称一致,函数将会退步,在GetLastError函数少校再次来到E卡宴ROXC90_INVALID_HANDLE。造成那种景观的因由是这个指标共享同1个命名空间。

Create伊夫nt重返事件目的的句柄,其余进度中的线程能够访问该事件目的。方法是使用继承性,用DuplicateHandle函数等来调用CreateEvent,或调用Open伊芙nt ,在pszName参数中设定二个与调用CreateEvent时设定的名字相匹配的名字。当不需求该事件指标时调用CloseHandle函数将其出狱。

HANDLE OpenEvent(DWORD fdwAccess, BOOL fInherit, PCTSTR pszName);

  1. 安装事件基本对象

BOOL Set伊夫nt(HANDLE
h伊夫nt); //将事件设为已通报状态

BOOL Reset伊夫nt(HANDLE
h伊芙nt); //将事件设为未通报状态

BOOL Pulse伊夫nt(HANDLE
h伊芙nt); // 使得事件成为已通报状态,然后立即变成未通报状态

相关文章