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

waitforsingleobject_setevent_创建线程函数(4)

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

------Solutions------

有点不明白lovelypengpeng(鹏鹏)说的主线程和用户界面线程,

好像Windows中UI程序的主线程就是处理用户界面的啊?

如果PostThreadMessage是在工作线程中的话,试试换成

SendMessage,这样在OnTest返回之前将一直等待,达到同样的效果

------Solutions------

用户界面线程可以在另一个线程中使用窗口,响应消息等等。其实它跟主线程没有什么区别

------Solutions------

tolovelypengpeng(鹏鹏)

你的辅助线程最好不要是一个UI,直接就是一个纯线程函数,也就是说没有任何窗体。因为如果你的线程函数是一个UI的话,那么它就有自己的消息队列,当你的主线程通过PostThreadMessage发送消息过来的时候,该消息就有可能被UI的消息队列所打乱,从而致使线程函数不能收到主线程的消息。试试用一个纯线程看,记住,不要出现任何窗体,连AfxMessageBox()都不要出现,我就吃过他的苦头。

------Solutions------

同意zgdhj95(我来自杭州)

使用单一线程处理UI,可以减少很多麻烦,事实上Delphi的VCL库就是这样做的

------Solutions------

WaitForSingleObject用于等待核心对象激发或超时返回,用于工作者线程。若用于UI线程,会造成阻塞消息,使界面反映迟缓;即便用超时处理,也会影响处理的效率。

MsgWaitForMultipleObjects用于同时等待核心对象激发和所需要的消息。因而有好的效率而不会影响界面的处理。

tolovelypengpeng(鹏鹏):

我的方法试过了没有?给大家一个交待。如果只是想看更多处理方法可以去看《Win32多线程程序设计》。

------Solutions------

tozgdhj95(我来自杭州):

"记住,不要出现任何窗体,连AfxMessageBox()都不要出现,我就吃过他的苦头。"用过::MessageBox(NULL,....)这样的形式吗?

------Solutions------

其实,很好跟踪的嘛?在SetEvent哪儿设置一个断点,在WaitForSingleObject哪儿设置一个断点,F5调试运行,看看到了SetEvent没有,如果没有那肯定是程序逻辑有问题,根本就没有地方触发事件WaitForSingleObject当然不能返回啦。如果到了,就检查一下SetEvent有没有返回错误,再看看SetEvent中Set的EVENT和WaitForSingleObject等的是不是同一个Event。。。waitforsingleobject大概就那么几个东西啦。不要怀疑这些API在什么UI线程不行之类的,这个世界上本无UI线程和工作线程之分,那些只是MFC引入的概念,他们和线程本身没有关系,只是和线程的工作性质有关系而已。

------Solutions------

todarkay(火凤凰):

“只是MFC引入的概念”,这是Windows引入的概念,不要弄错了,纯SDK编程也会有“UI线程和工作线程之分”,没有消息链,UI界面就不可能正常运转,COM中的STA模式就完成不了同步功能。

我在WaitForSingleObject吃过苦头。对于同步对象,WIN32函数之所以有这么多不同的函数,自然有它的道理。

兄弟,还是看看书再说吧!

------Solutions------

UI线程和工作线程的确有很大区别,建议将界面操作全部交给主线程,尽量不要阻塞它,工作线程来处理各种耗时或者可能阻塞的工作,通过消息进行联络。waitforsingleobject


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

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

    • 李进峰
      李进峰

      #易烊千玺##易烊千玺真的很不错##易烊千玺献声小王子#看着小王子觉得

    • 方衡
      方衡

      人若犯我

    • 戴山隐
      戴山隐

      • 克里斯蒂娜
        克里斯蒂娜

        最先进的濒海战斗舰不就驻扎在新加坡么~

    热点图片
    拼命载入中...