WaitForSingleObject 和 CEvent / createevent 的用法 ,线程同步
来源:互联网 发布:ruby元编程 第2版 pdf 编辑:程序博客网 时间:2024/05/21 22:38
【红色字为博主添加】
有这种情况,在一个按钮里面close某个IO操作,但是还有个线程在死循环的读写,假如线程read/write的时候,那么去close就会报错,方法是close之前看read/write完毕了没有,实现:
线程中:
1、尽情的read/write()
2、设置事件setevnet
界面中:
1、清除循环读取条件
2、resetevent()
3、waitforsingleobject()
看下网友说话:
来自:http://blog.csdn.net/angxiao/article/details/7449585
WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。
CEvent 类提供了对事件的支持。事件是一个允许一个线程在某种情况发生时,唤醒另外一个线程的同步对象。例如在某些网络应用程序中,一个线程(记为A)负责监听通讯端口,另外一个线程(记为B)负责更新用户数据。通过使用CEvent 类,线程A可以通知线程B何时更新用户数据。每一个CEvent 对象可以有两种状态:有信号状态和无信号状态。线程监视位于其中的CEvent 类对象的状态,并在相应的时候采取相应的操作。
在MFC中,CEvent 类对象有两种类型:人工事件和自动事件。一个自动CEvent 对象在被至少一个线程释放后会自动返回到无信号状态;而人工事件对象获得信号后,释放可利用线程,但直到调用成员函数ReSetEvent()才将其设置为无信号状态。在创建CEvent 类的对象时,默认创建的是自动事件。 CEvent 类的各成员函数的原型和参数说明如下:
1、CEvent(BOOL bInitiallyOwn=FALSE, BOOL bManualReset=FALSE, LPCTSTR lpszName=NULL, LPSECURITY_ATTRIBUTES lpsaAttribute=NULL);
- bInitiallyOwn:指定事件对象初始化状态,TRUE为有信号,FALSE为无信号;
- bManualReset:指定要创建的事件是属于人工事件还是自动事件。TRUE为人工事件,FALSE为自动事件;
- 后两个参数一般设为NULL,在此不作过多说明。
2、BOOL CEvent::SetEvent();
将 CEvent 类对象的状态设置为有信号状态。如果事件是人工事件,则 CEvent 类对象保持为有信号状态,直到调用成员函数ResetEvent()将其重新设为无信号状态时为止。如果CEvent 类对象为自动事件,则在SetEvent()将事件设置为有信号状态后,CEvent 类对象由系统自动重置为无信号状态。
如果该函数执行成功,则返回非零值,否则返回零。
3、BOOL CEvent::ResetEvent();
该函数将事件的状态设置为无信号状态,并保持该状态直至SetEvent()被调用时为止。由于自动事件是由系统自动重置,故自动事件不需要调用该函数。如果该函数执行成功,返回非零值,否则返回零。我们一般通过调用WaitForSingleObject函数来监视事件状态。前面我们已经介绍了该函数。由于语言描述的原因,CEvent 类的理解确实有些难度,但您只要通过仔细玩味下面例程,多看几遍就可理解
例子:
CEvent g_faxEvent(TRUE);
DWORD WINAPI GetMessageCenterNum(void *p)
{
WaitForSingleObject(g_faxEvent, INFINITE);
g_faxEvent.ResetEvent();
/////////////////////////////////////////////
要保护的代码
////////////////////////////////////////////
return 0;
}
- WaitForSingleObject 和 CEvent / createevent 的用法 ,线程同步
- WaitForSingleObject和CEvent的用法
- WaitForSingleObject()和CEvent的用法
- WaitForSingleObject和CEvent用法
- WaitForSingleObject和CEvent用法
- WaitForSingleObject和CEvent用法
- WaitForSingleObject和CEvent用法
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法(转)
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法(转)
- 线程中CreateEvent和SetEvent及WaitForSingleObject的用法
- 虚拟机无法访问主机网站
- 杭电1421
- 软件随想录(local.joelonsoftware.com/wiki)-2000年04月26日 使用介面设计手册第六章 - User Interface Design for Programmers
- Understanding data flow for “Standard Order”
- getenv、setenv函数
- WaitForSingleObject 和 CEvent / createevent 的用法 ,线程同步
- Weighted quick union with Path compression by halving
- 求最大全1子矩阵的一些探讨
- 呼兰河传
- 人生一世 · 花开一季
- 通过PPA仓库为ubuntu安装Oracle Java 7
- 软件的彼得原理"是什么
- Oracle学习系列—Oracle透明网关 for SQL Server
- 判断某天是周几的函数