while(true)
{
WaitForSingleObject( ReciveEvent,INFINITE); if()
{........}
}
如上代码!如果我把ResetEvent(ReciveEvent)放的位置不同的话效果不同。
while(true)
{
WaitForSingleObject( ReciveEvent,INFINITE);
ResetEvent(ReciveEvent);放这里的时候if(){.....}会被多次执行 if()
{........}
ResetEvent(ReciveEvent);放这里的时候if(){....}只执行一次!
}
SetEvent在另一个线程执行。为什么会出现上边所放位位置不同,执行情况不同的情况,ResetEvent都是执行成功的
{
WaitForSingleObject( ReciveEvent,INFINITE); if()
{........}
}
如上代码!如果我把ResetEvent(ReciveEvent)放的位置不同的话效果不同。
while(true)
{
WaitForSingleObject( ReciveEvent,INFINITE);
ResetEvent(ReciveEvent);放这里的时候if(){.....}会被多次执行 if()
{........}
ResetEvent(ReciveEvent);放这里的时候if(){....}只执行一次!
}
SetEvent在另一个线程执行。为什么会出现上边所放位位置不同,执行情况不同的情况,ResetEvent都是执行成功的
解决方案 »
- vc c/s架构网络编程重连的问题?
- 关于文件传输的命名问题
- VC++6编译出来的程序能不能动态更改自己的主题?
- 放分,同时请大家帮忙(顶者有分,本周五给分)
- 急,我的程序是不是活见鬼了??(关于SublassWindow 的问题)
- 关于CFormView及其派生类的处理问题
- 有没有试过用Windows作为客户端,而linux作为服务器的socket开发。
- 谢谢你帮我解决了UNICODE的问题,现在有个新的问题,希望帮我解决一下
- vc创建ppt,出现错误。error:"capplication"没有成员“setvisible”
- 请问高手:那位知道oicq的控件框靠边隐藏技术是如何实现的?
- 请问:在vc++中装msdn的问题?谢谢!高分求回复
- 我在xp下如何锁定桌面?
{........}这个里面是不是有SetEvent?
蹭点分!
{
WaitForSingleObject( ReciveEvent,INFINITE);
ResetEvent(ReciveEvent);放这里的时候if(){.....}会被多次执行//位置1 if()
{........}
ResetEvent(ReciveEvent);放这里的时候if(){....}只执行一次!//位置2
}
我们来分析一下上面这种情况:
首先根据你所说,该Event应该是一个手动复位的事件。
1.当放在位置1的时候,事件复位后,就去执行 if (){....},在执行 if 期间,另一个线程完全有机会调用了SetEvent,导致在执行完if后,Waitfor函数等待的Event已经被激发(被另一个线程SetEvent)
2.当放在位置2的时候,事件复位后,立刻返回while,然后又执行WaitFor,你可以看到ResetEvent与WaitFor的执行顺序非常接近。所以WaitFor会挂起等待。此时如果没有其他线程SetEvent的话。WaitFor将不会往下执行。结论:位置2也并不是只会执行1次if(){...},如果你运行程序1万次。只是 ResetEvent与WaitFor之间太近,近到其他线程不足以在它两者之间搞鬼(SetEvent)。位置2与WaitFor之间的距离就太远了,远到另一个线程可以在他们中间搞鬼(SetEvent)