多线程Event之详解
来源:互联网 发布:数据库计算机的主机名 编辑:程序博客网 时间:2024/05/19 15:39
Ø 要产生一个event对象,需要调用CreateEvent
HANDLE CreateEvent
(
LPSECURITY_ATTRIBUTESlpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPCTSTR lpName
);
参数:
lpEventAttributes 安全属性,NULL表示使用默认属性,该属性在Window 95中会被忽
略。
bManualReset 如为FALSE,表示这个event将在变成激发状态(因而唤醒一个线程)之后,自动重置(reset)为非激发状态。若为TRUE则表示不会自动重置,必须靠程序操作(调用ResetEvent())才能将激发状态的event
重置为非激发状态。
bInitialState 如为TRUE,表示这个event一开始处于激发状态。如为FALSE,则表示这个event一开始处于非激发状态。
lpName Event对象的名称。任何线程或进程都可以根据这个文字名称,使用这一event对象。
返回值:
如果调用成功,会传回一个event handle,GetLastError()会传回0。如果lpName所指定的event对象已经存在,CreateEvent()传回的是该event handle,而不会产生一个新的。这时候GetLastError会传回ERROR_ALREADY_EXISTS。如果CreateEvent()失败,传回的是NULL,GetLastError()可以获得更进一步的失败信息。
Ø 函数说明
SetEvent() 把event对象设为激发状态
ResetEvent() 把event对象设为非激发状态
PulseEvent() 如果是一个Manual Reset Event:把event对象设为激发状态,唤醒“所
有”等待中的线程,然后event恢复为非激发状态。如果是一个Auto Reset
Event:把evnet对象设为激发状态,唤醒“一个”等待中的线程,然后event
恢复为非激发状态。
Ø 名词说明
激发态: 可以再次被锁定或可以被WaitXXXXObjectXX类函数等待成功(可以这样认为,现在对象的状态是:其他线程可以处理这个对象了)
非激发态: 这个对象已经被其中一个线程所拥有,则此时这个对象所呈现的状态是其他线程不能再得到这个对象。当用WaitXXX函数操作时,不会成功。
Ø 使用方法1
HANDLE hEvent = ::CreateEvent(
NULL, //默认安全属性
TRUE, //手动重置
FALSE, //初始处于非激发态
NULL //名子
);
SetEvent(hEvent); //设置为激发态
DWORD WINAPI ThreadFun1(LPVOID p)
{
WaitForSingleObject(hEvent,INFINITE);
ResetEvent(hEvent); //设置为非激发态
/*
操作……
*/
SetEvent(hEvent); //设置为激发态
return (DWORD) 0;
}
Ø 使用方法2
HANDLE hEvent = ::CreateEvent(
NULL, //默认安全属性
FALSE, //自动重置
FALSE, //一开始处于非激发态
NULL //名子
);
SetEvent(hEvent); //设置为激发态
DWORD WINAPI ThreadFun1(LPVOID p)
{
WaitForSingleObject(hEvent,INFINITE);
/*
操作……
*/
SetEvent(hEvent); //设置为激发态
return (DWORD) 0;
}
- 多线程Event之详解
- 多线程之Event
- Python多线程之event
- Python多线程之threading Event
- day11_python多线程之event代码
- Windows中多线程同步之事件(Event)
- python 多线程之信号机Semaphore、事件Event
- 多线程同步之Event(事件对象)
- Win32多线程之事件(Event Objects)
- C++多线程同步之事件(Event)
- Event多线程
- 多线程---event
- 多线程Event
- 多线程编程(13) - 多线程同步之 Event (事件对象)
- 多线程之-GCD详解
- 多线程详解之NSThread
- 多线程详解之GCD
- CYC-多线程之详解
- Cookies操作
- DSG realsync 跳过xf1文件相关对象的操作
- JAVA常用类
- LTE的演进目标
- jsp图片或者文件上传
- 多线程Event之详解
- eclipse打包总结,包括jar、bat以及exe文件
- SOL Server数据库主键自增
- CString,string,char*的综合比较
- JAVA 泛型接口
- MySQL 数据类型
- nyoj 571 整数划分问题(dp)
- 不借助中间变量交换数值
- JAVA——基础知识加强