我下面的ResetEvent 和SetEvent 搭配使用的流程有神马问题吗?有时候没进SetEvent,等待的线程竟然不卡

wodetn 2011-05-05 05:08:24
我下面的利用关键事件做的线程同步(通讯)有个“死结”问题:有的时候SetEvent未执行,但是主线程竟然pass,难道ResetEvent 有失败的情况吗?求帮忙分析下面的机制 有神马问题吗?

HANDLE g_hEventtmsi ; //类的成员
g_hEventtmsi = CreateEvent(NULL,true,true,NULL); 类的构造函数中初始化

主线程:
ResetEvent(g_hEventtmsi);
发送消息给服务器
dws = WaitForSingleObject(g_hEventtmsi,30000); //等事件


重叠通讯模式的RecvCallBackFun里:
如果收到消息
SetEvent(g_hEventtmsi);
...全文
328 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
glorious_moment 2011-05-09
  • 打赏
  • 举报
回复
创建Event的时候最好选择自动重置方式,这样就不用再手动添加resetEvent()来重置
wodetn 2011-05-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jernymy 的回复:]
dws = WaitForSingleObject(g_hEventtmsi,INFINITE); //等事件 无限等下去,这样就不会pass
[/Quote]

我还想问:创建的时候 信号状态是设置为 true 还是 false 好
loving_hoping 2011-05-08
  • 打赏
  • 举报
回复
你创建的EVENT是手动的,所以你的等待,返回WAIT_OBJECT_0时,你要ResetEvent() 一下,
不然第一次SetEvent后,你的等待会一直返回WAIT_OBJECT_0,
至于超时,一般不要设太大,也不要设为INFINITE,否则,可能会因为WaitForSingleObject一直等待,无法结束线程!
初始值TRUE或FALSE,看你的需要,要一开始就有信号,那就TRUE,否则FALSE!
ljt3969636 2011-05-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wodetn 的回复:]

引用 6 楼 jernymy 的回复:
dws = WaitForSingleObject(g_hEventtmsi,INFINITE); //等事件 无限等下去,这样就不会pass


我还想问:创建的时候 信号状态是设置为 true 还是 false 好
[/Quote]

.........初始是触发态还是非触发态没有好不好,看你自己需要
jernymy 2011-05-05
  • 打赏
  • 举报
回复
dws = WaitForSingleObject(g_hEventtmsi,INFINITE); //等事件 无限等下去,这样就不会pass
ljt3969636 2011-05-05
  • 打赏
  • 举报
回复
WaitForSingleObject(g_hEventtmsi,INFINITE);//看下
wodetn 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aiwnx 的回复:]
调用次序对吗?应该先调用WaitForSingleObject, 再调用ResetEvent,不能倒过来的。
[/Quote]
我一开始 初始化的 是 TRUE
wodetn 2011-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aiwnx 的回复:]
调用次序对吗?应该先调用WaitForSingleObject, 再调用ResetEvent,不能倒过来的。
[/Quote]
为什么 应该是这个顺序?没错吗
aiwnx 2011-05-05
  • 打赏
  • 举报
回复
调用次序对吗?应该先调用WaitForSingleObject, 再调用ResetEvent,不能倒过来的。
ljt3969636 2011-05-05
  • 打赏
  • 举报
回复
WaitForSingleObject(g_hEventtmsi,30000);//您这里设置了超时啊,是有可能没SetEvent但是触发

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧