b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

waitforsingleobject_createsemaphore函数_releasemutex

电脑杂谈  发布时间:2016-12-26 15:07:25  来源:网络整理

"在主线程中慎用WaitForSingleObject WaitForMultipleObjects":关键词:

下面的代码我调试了将近一个星期,你能够看出什么地方出了问题吗?

线程函数:

主线程中使用createthread启动线程。

当想终止子线程时,在主线程中:

bterminate = true;

createsemaphore函数_releasemutex_waitforsingleobject

waitforsingleobject(threadhandle, infinite);

可是,以运行到waitforsingleobject,子线程就crash了。

为什么呢?

问题原因:

后来我终于在insertitem的反汇编中发现了如下的代码

call dword ptr [__imp__sendmessagea@16 (7c141b54h)]

releasemutex_waitforsingleobject_createsemaphore函数

可见,insertitem是必须借助消息循环来完成任务的。如果我们在主线程中waitforsingleobject了,必然导致主线程阻塞,也就导致了消息循环的阻塞,最终导致工作线程crash掉了*_*

解决方案:

为了解决在主线程中wait的问题,微软专门设计了一个函数msgwaitformultipleobjects,这个函数即可以等待信号(thread,event,mutex等等),也可以等待消息(msg)。即不论有信号被激发或者有消息到来,此函数都可以返回。waitforsingleobjectwaitforsingleobject呵呵,那么我的解决办法也就出来了。

将上面的waitforsingleobject用下面的代码替换:

总结:

如果在工作线程中有可能涉及到了消息驱动的api,那么不能在主线程中使用waitforsingleobject一类函数,而必须使用上述的方案。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23465-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 翁孟寅
        翁孟寅

        第二我们应该加快自己在南沙的岛礁建设

      • 任丙金
        任丙金

        我国是一个爱好和平的国家

      • 长孙无忌
        长孙无忌

        直升机航母可以起降F35

      每日福利
      热点图片
      拼命载入中...