📄 16.1.1 创建事件对象 590.txt
字号:
第16章 线程同步与异步套接字编程
上一章介绍了线程同步,以及利用互斥对象实现线程同步的方法。本章将继续介绍另两种线程同步
的方法 :事件对象和关键代码段,另外,还将介绍利用异步套接字编写网络应用程序的实现。
16.1 创件对象
事件对象也属于内核对象,它包含以下三个成员:
·
使用计数:
·
用于指明该事件是一个自动重置的事件还是一个人工重置的事件的布尔值:
·
用于指明该事件处于己通知状态还是未通知状态的布尔值。
事件对象有两种不同的类型:人工重置的事件对象和自动重置的事件对象。当人工重置的事件对象得
到通知时,等待该事件对象的所有线程均变为可调度线程。当一个自动重
置的事件对象得到通知时,等待该事件对象的线程中只有一个线程变为可调度线程。
16.1 .1 创建对象
在程序中可以通过 CreateEvent函数创建或打开一个命名的或匿名的事件对象,该函数的原型声明
如下所示 :
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes ,
BOOL bManualReset ,
BOOL binitialState,
LPCTSTR lpName
该函数有四个参数,各参数含义如下所述:
. lpEventAttributes
指向 SECURITY ATTRmUTES结构体的指针。如果其值为 NULL,则使用默认的安全性。
BOOL bManualReset ,
BOOL类型,指定创建的是人工重置事件对象,还是自动重置事件对象。如果此参数为 TRUE,表示该
函数将创建一个人工重置事件对象;如果此参数为 FALSE,表示该函数将创建一个自动重置事件对
象。如果是人工重置事件对象,当线程等待到该对象的所有权之后,需要调用 ResetEvent函数手动
地将该事件对象设置为无信号状态;如果是自动重置事件对象,当线程等到该对象的所有权之后,系
统会自动将该对象设置为无信号状态。
. blnitialState
BOOL类型,指定事件对象的初始状态。如果此参数值为真,那么该事件对象初始是有信号状态 :否
则是无信号状态。
. lpName
指定事件对象的名称。如果此参数值为 NULL,那么将创建一个匿名的事件对象。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -