多线程同步:事件
来源:互联网 发布:php没有ext文件夹 编辑:程序博客网 时间:2024/05/24 06:44
<1>win32中事件对象的使用
(1)win32中头文件
< Windows.h>
(2)创建事件对象
1)函数原型
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes,
BOOL bManualReset,
BOOL bInitialState,
LPCTSTR lpName
);
2)参数说明
lpEventAttributes
安全性。如果是NULL,事件将获得一个默认的安全符。
bManualReset
指定创建的是人工重置事件对象,还是自动重置事件对象。如果是TRUE,创建的是人工重置事件对象,那么当线程等待到该对象的所有权后,必须用ResetEvent函数来手工将事件的状态复原到无信号状态。如果设置为FALSE,将创建一个自动重置事件对象,当一个等待线程被释放以后,系统将会自动将事件状态复原为无信号状态。
当人工重置事件对象得到通知时,等待该事件对象的所有线程均变为可调度线程。当一个自动重置的事件对象得到通知时,等待该事件对象的线程只有一个线程变为可调度线程,同时操作系统会将该事件对象设置为无信号状态。
bInitialState
指定事件对象的初始状态。如果为TRUE,初始状态为有信号状态;否则为无信号状态。
lpName
指定事件的对象的名称
3)返回值
如果函数调用成功,函数返回事件对象的句柄。
如果对于命名的对象,在函数调用前已经被创建,函数将返回存在的事件对象的句柄,而且在GetLastError函数中返回ERROR_ALREADY_EXISTS。因此:可以通过创建一个命名的事件对象,实现应用程序只有一个实例可以运行。
例:my_Event=CreateEvent(NULL,FALSE,FALSE,”mine”);
if(my_Event)
{
if(ERROR_ALREADY_EXISTS==GetLastError())
{
return;
}
}
else
{
//执行程序
}
如果函数失败,函数返回值为NULL,如果需要获得详细的错误信息,需要调用GetLastError。
(3)设置事件对象状态
SetEvent(),这个函数把指定的事件对象设置为有信号状态。
BOOLSetEvent(HANDLE hEvent); hEvent表示句柄。
返回值:如果操作成功,则返回非零值,否则为0。可以调用GetLastError得到错误的详细信息。
(4)重置事件对象状态
ResetEvent(),这个函数把指定的事件对象设置为无信号状态。
BOOL ResetEvent(HANDLE hEvent); hEvent表示句柄。
返回值:函数成功,返回非0值,否则返回0。可以调用GetLastError得到错误的详细信息。
<2>MFC中事件对象的使用
(1)MFC中头文件
"afxmt.h"
(2)创建事件对象
1)构造函数原型
CEvent(BOOLbInitiallyOwn=FALSE,
BOOL bManualReset=FALSE,
LPCTSTR lpszName=NULL,
LPSECURITY_ATTRIBUTESlpsaAttribute=NULL);
2)参数说明:
与 CreateEvent相同,注意顺序。
(3)设置事件对象状态
BOOLCEvent::SetEvent();
将 CEvent 类对象的状态设置为有信号状态。如果事件是人工事件,则 CEvent 类对象保持为有信号状态,直到调用成员函数ResetEvent()将 其重新设为无信号状态时为止。如果CEvent 类对象为自动事件,请求到事件对象后CEvent 类对象由系统自动重置为无信号状态。
如果该函数执行成功,则返回非零值,否则返回零。
(4)重置事件对象状态
BOOLCEvent::ResetEvent();
该函数将事件的状态设置为无信号状态,并保持该状态直至SetEvent()被调用时为止。由于自动事件是由系统自动重置,故自动事件不需要调用该函数。
如果该函数执行成功,返回非零值,否则返回零。
我们一般通过调用WaitForSingleObject函数来监视事件状态。
- 多线程--同步(事件Event)
- windows多线程同步--事件
- 多线程同步:事件
- Window多线程同步(事件)
- windows多线程同步机制---事件
- 多线程编程之事件同步
- 多线程编程实例----线程同步之事件
- Windows中多线程同步之事件(Event)
- 多线程同步之Event(事件对象)
- 同步、异步、多线程与事件型综述
- 多线程6:经典线程同步 事件Event
- C#多线程同步事件及等待句柄
- 同步、异步、多线程与事件型综述
- 白话windows多线程同步之事件对象
- C++ 事件对象 多线程同步互斥
- 多线程—(同步功能)事件,信息量
- C#多线程同步事件及等待句柄
- windows多线程同步之事件对象
- 第六次上机实验——数组合并
- 后台开发、前端开发的一些想法
- 页面预加载loading动画,再载入内容
- JAVA虚拟机文件编码参数 -Dfile.encoding
- 随机事件及其概率运算 2016.5.27
- 多线程同步:事件
- 并查集的生动形象的讲解
- UVA 10859 Placing Lampposts(树状DP)
- android模拟器上最简单的安装和卸载app程序的方法
- Android进程间通信(IPC)机制Binder简要介绍和学习计划
- Trie+DFS(1251)
- Spring in action 00
- iOS开发之高级视图——UISearchBar
- 专题三 · 1011