除了钩子以外,还有没有方法取得其他线程的消息? 遇到的问题是这样的,主线程执行某一函数会卡3秒左右。而我想让他在卡的这段时间内消息处理能依然如故,所以想在执行函数前开一子线程负责处理主线程的消息,执行完毕PostThreadMessage发一个WM_QUIT让子线程退出!除了钩子以外,还有没有方法取得其他线程的消息? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 刚才试了一下,钩子也不行,郁闷。“执行函数”开一个新的线程也是行不通的。主线程需要执行函数的返回值,虽然主线程可以在等待函数返回值的时候用GetMessage之类的处理消息,但如果等待期间有MessageBox或者DoModal的话,就会接手原先等待的GetMessage循环,这样一来,主线程就不能在执行函数结束后继续执行下面的语句了。 如果有什么方法可以从消息队列里面取走WM_QUIT消息也可以。 如果让主线程负责窗口消息,可能会因为MessageBox和DoModal接手消息处理,导致开启线程的地方无法继续执行下去。刚才试了一下,把执行函数放到线程里面,然后在结束的时候,PostThreadMessage发一个WM_QUIT给主线程,主线程原先处于GetMessage的循环,收到WM_QUIT后,会退出GetMessage循环,进入PeekMessage循环,让PeekMessage取走WM_QUIT的,结果消息确实可以继续处理了,不过那个执行函数一放到线程里面,就会执行失败,郁闷…… 到底有没有方法可以取其他线程的消息呢?那个会卡3秒的执行函数,是用于开启摄像头的,原来执行失败,是因为该线程com没有初始化,后来我初始化了一下,单步跟踪发现它确实是执行成功了,只是捕捉的画面就是出不来。后来才发现画面出不来是因为捕捉窗口是有子线程创建的,所以只有子线程才能处理它的消息,在该子线程里面加入消息循坏,画面总算是出来了,但是这个子线程就必须一直开在那里才行。本来是想子线程开一下马上关闭的,这样又要多管理一条线程,感觉很不好! 终于搞定了,只有把执行函数拆的七零八落,把创建窗口的代码扔给主线程,而子线程只负责开启摄像头的pin连接操作,就没问题了。不过互斥还是比较麻烦一点,OK了 To Winner25(如果我们走得太快,停一停,让灵魂跟上来) 主线程是堵了,但是窗口消息还是会被扔到消息队列里面去的,如果可以让子线程来处理主线程的窗口消息,那还是没有问题的。把执行函数扔到子线程里面,就需要该执行函数不包含窗口创建的动作,如果子线程创建了窗口,那么这个窗口的消息就会储存在子线程的消息队列里面,这样子线程就不可以退出了,因为如果它退出的话,这个窗口的消息就没有任何线程可以响应了。 如何对CString扩容? 关于频谱分析? checklistbox在哪儿? vc中"浏览文件夹"是如何实现的? 关于CFile::Read的问题 在这种情况下,应该怎么继承? 转换函数? 急!!菜鸟向高手请教....在VC中如何控制IIS,也就怎样使用程序来控制IIS的所有配置 CMFCTabCtrl滚动条问题 我是第一次上这个网站, 非常的棒!我有个CMap 的问题请教,一定要回答, 否则。。。 为什么提示控件关联的变量没声明? 这个赋值语句相当于的对吗???
主线程需要执行函数的返回值,虽然主线程可以在等待函数返回值的时候用GetMessage之类的处理消息,但如果等待期间有MessageBox或者DoModal的话,就会接手原先等待的GetMessage循环,这样一来,主线程就不能在执行函数结束后继续执行下面的语句了。
后来才发现画面出不来是因为捕捉窗口是有子线程创建的,所以只有子线程才能处理它的消息,在该子线程里面加入消息循坏,画面总算是出来了,但是这个子线程就必须一直开在那里才行。本来是想子线程开一下马上关闭的,这样又要多管理一条线程,感觉很不好!
主线程是堵了,但是窗口消息还是会被扔到消息队列里面去的,如果可以让子线程来处理主线程的窗口消息,那还是没有问题的。
把执行函数扔到子线程里面,就需要该执行函数不包含窗口创建的动作,如果子线程创建了窗口,那么这个窗口的消息就会储存在子线程的消息队列里面,这样子线程就不可以退出了,因为如果它退出的话,这个窗口的消息就没有任何线程可以响应了。