WaitForSingleObject的使用/WaitForSingleObject实例
0.简介:
0.1 返回值:如果在指定的时间内有信号状态则返回 WAIT_OBJECT_0 ,如果时间超过dwMilliseconds 值但时间事件还是无信号状态则返回 WAIT_TIMEOUT 。
0.2 WaitForSignalObject(PThread->线程名柄,非infinate ):若线程未开始则出错;若线程正在运行则返回WAIT_TIMEOUT;若线程运行结束则返回WAIT_FAILED;
1.指示一个线程开始执行:
UINT CFlushDlg::MyThreadProc( LPVOID pParam )
{
WaitForSingleObject(g_event,INFINITE);
For(;;) { ………… . }
return 0;
}
在这个线程函数中只有设置 g_event 为有信号状态时才执行下面的 for 循环,因为 g_event 是全局变量,所以我们可以在别的线程中通过 g_event. SetEvent 控制这个线程。
2.指定一个时间间隔来执行一个线程的函数体:
UINT CFlushDlg::MyThreadProc( LPVOID pParam )
{
while(WaitForSingleObject(g_event,MT_INTERVAL)!=WAIT_OBJECT_0)
{ ……………… }
return 0;
}
在这个线程函数中可以可以通过设置 MT_INTERVAL 来控制这个线程的函数体多久执行一次,当事件为无信号状态时函数体隔 MT_INTERVAL 执行一次,当设置事件为有信号状态时,线程就执行完毕了。
//20080909:实际应用后的体会
3.使用实例:
3.1背景:
(1)两个线程(主线程和另开的工作者线程)有交互,工作者线程读取数据库信息,通知主线程显示读取的信息;主线程显示信息及任意时刻可以结束工作者线程;
(2)主要实现代码放在一个DLL中,界面操作负责对DLL的命令调用;(实际上这个无所谓只是一种与界面的分离方法而已,对程序而言没什么区别);
3.2源代码示意:
//.cpp
HANDLE gEventEndInit = ::CreateEvent( NULL, TRUE, FALSE, "EndInit" );
CWinThread* pInitThread = NULL;
UINT InitThread(LPVOID lpParam )
{
申请内存;
读取数据;
for( 数据个数 )
{
判断是否有结束线程事件:如下代码
if( WAIT_OBJECT_0 == WaitForSingleObject( gEventEndInit, 0 ) )
{
ResetEvent( gEventEndInit );
break;
}
对数据进行处理;
通知主线程显示数据;
//此处通知若用SendMessage()仍会死锁;只能用PostMessage();
//死锁的原因是相互存在等待;
//也就是说尽管在结整线程处有Sleep(250);但Sleep()只是释放自己线程的时间
//片给别的线程,但时间片不能自己给自己,这样主线程在等待工作线程结束而工作线程
//在等待主线程空闲好显示数据
}
释放内存;
}
void EndInitThread()
{
SetEvent( gEventEndInit );
while( NULL != pInitThread
&& ( WaitForSingleObject( pInitThread->m_hThread, 0)\
== WAIT_TIMEOUT )
)
{
Sleep( 250 );
TRACE( "正在等待初始化动作的结束......\n" );
}
}
BOOL Init( )
{
ResetEvent( gEventEndInit );
pInitThread = AfxBeginThread( InitThread,NULL );
return TRUE;
}
VC++ 中多线程开发学习资料
5星 · 超过95%的资源 需积分: 9 60 浏览量
2009-09-02
09:40:14
上传
评论
收藏 2KB RAR 举报
jqb
- 粉丝: 13
- 资源: 23
最新资源
- Semantic Color Palette 语义调色板Unity游戏开发插件资源unitypackage
- Low Poly Nature:Lush and Diverse Environments低聚自然郁郁Unity低多边形模型资源
- voc数据集是什么-我们如何使用voc数据集
- Edgar Pro-Procedural Level Generator程序关卡生成器Unity开发插件unitypackage
- 宝藏软件m3u8下载器\m3u8DL-CLI
- 三次样条插值的介绍-什么是三次样条插值原理
- http的一些相关介绍-对于我们来说什么是http
- 全卷积网络基于voc2012数据集简单pytorch实现
- pycharm的一些介绍-用于更好的学习python
- 基于C++的程序设计大赛天梯赛L2答案(天梯赛)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈