debug和release下PostThreadMessage的异同
MFC中创建线程分为工作线程和UI线程。其中UI线程可以通过继承CWinThread进行创建。
创建函数如下:
CWinThread *m_pRecogThread;//语音识别线程
m_pRecogThread =(CSpeechRecogThread *) AfxBeginThread(RUNTIME_CLASS(CSpeechRecogThread));
这样就创建了UI线程,就可以通过m_pRecogThread->PostThreadMessage(UM_VERIFY_AVAILABILITY,NULL,NULL),给当前线程发送消息。
然而,PostThreadMessage缺常常会出问题。在debug下,上述代码能够正确执行,而debug下不能正确执行。
我们执行下面代码捕捉错误,
DWORD dw;
dw = GetLastError();
CString str;
str.Format("%u",dw);
正常情况下,返回的应该是0,而错误的时候返回的是1444.
百度后发现,1444 PostThreadMessage 这种错误是因为线程没有创建消息队列,可以通过延时解决。以下是代码:
while(!m_pRecogThread->PostThreadMessage(UM_VERIFY_AVAILABILITY,NULL,NULL))
				{
					Sleep(1000);
				}
但是上述代码在release模式下没有任何变化。
百度了好久,找到一个链接MFC's CWinThread::PostThreadMessage handler not called .PostThreadMessage没有被调用。
可以通过在该线程InitInstance函数中,调用PeekMessage解决。具体的步骤就是在InitInstance函数中加入如下代码。
AfxOleInit();
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
MSG msg;
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
到处,问题被完整解决:
参考文献:
1 http://stackoverflow.com/questions/12764300/mfcs-cwinthreadpostthreadmessage-handler-not-called
2 http://www.cppblog.com/sandy/archive/2005/12/31/2320.html
debug和release下PostThreadMessage的异同的更多相关文章
- 打开属性页,分别在Debug和Release下将其配置类型改为:静态库(.lib);
		
右键工程->属性 配置类型里面的下拉菜单选择静态库
 - vs2010 创建预编译头 Debug 正常 Release Link Error问题解决
		
问题:创建预编译头 Debug 正常 Release Link Error Main.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUki ...
 - (原)Vs中debug和release结果不一致
		
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5598091.html 前两天调试程序,出现了一个很蛋疼的问题,debug和release结果不一致.网 ...
 - 盘点.NET JIT在Release下由循环体优化所产生的不确定性Bug
		
盘点在Release下由循环体优化所产生的不确定性Bug 在这篇文章中,我将介绍一些在测试环境(DEBUG)下正常,但在生产环境(Release)下却会出现的一些让人难以捉摸的Bug. 如果你对开源技 ...
 - VC下Debug和Release区别
		
整理日: 2015年3月23日 最近写代码过程中,发现 Debug 下运行正常,Release 下就会出现问题,百思不得其解,而Release 下又无法进行调试,于是只能采用printf方式逐步定位到 ...
 - 在用VC编译下debug和release的什么区别
		
DEBUG和RELEASE 版本差异及调试相关问题:. 内存分配问题 1. 变量未初始化.下面的程序在debug中运行的很好. thing * search(thin ...
 - Objective-C与Swift下的自定义打印函数(Debug和Release)
		
1.Objective-C 在使用Objective-C进行开发的过程中,为了Debug会不断的设置打印函数.如下图是我们经常用的,用来测试监听方法的实现与否: NSLog(@"%s&quo ...
 - Swift打印Debug日志,实现Release下不打印
		
OC内,我们往往做log打印时,会考虑一个Debug环境下打印,Release下控制不打印,以节约性能消耗. OC我们可以这样做: 在pch文件内,定义如下: //打印日志 #ifdef DEBUG ...
 - 如何在 .NET 库的代码中判断当前程序运行在 Debug 下还是 Release 下
		
我们经常会使用条件编译符 #if DEBUG 在 Debug 下执行某些特殊代码.但是一旦我们把代码打包成 dll,然后发布给其他小伙伴使用的时候,这样的判断就失效了,因为发布的库是 Release ...
 
随机推荐
- BZOJ 2938: [Poi2000]病毒 [AC自动机 拓扑排序]
			
2938: [Poi2000]病毒 题意:判断是否存在无限长的不含模式串的字符串.只有01. 建出套路DP的转移图,判断有环就行了 练习一下拓扑排序 #include <iostream> ...
 - BZOJ 2005: [Noi2010]能量采集 [莫比乌斯反演]
			
题意:\((0,0)\)到\((x,y),\ x \le n, y \le m\)连线上的整点数\(*2-1\)的和 \((0,0)\)到\((a,b)\)的整点数就是\(gcd(a,b)\) 因为. ...
 - [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
			
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
 - mysql 修改默认字符集为utf8
			
MySQL 5.5, all you need is: [mysqld] character_set_client=utf8 character_set_server=utf8 collation_s ...
 - css命名整理
			
.container { width: 720px; background: #fafafa; border: 2px dashed #999; padding: 10px; float: left ...
 - python自动化--语言基础1--数据类型及类型转换
			
Python中核心的数据类型有哪些?变量(数字.字符串.元组.列表.字典) 什么是数据的不可变性?哪些数据类型具有不可变性数据的不可变是指数据不可更改,比如: a = ("abc" ...
 - 基于JDK1.8的HashMap分析
			
HashMap的强大功能,相信大家都了解一二.之前看过HashMap的源代码,都是基于JDK1.6的,并且知其然不知其所以然,现在趁着寒假有时间,温故而知新.文章大概有以下几个方面: HashMap的 ...
 - ubuntu16.04编译安装mysql-boost-5.7.21并编译成php扩展测试与使用
			
我之前的文章已经改造了自定义MVC框架中的工具类(验证码,图片上传,图像处理,分类)4个类,接下来,就要改造模型类,模型类肯定要连接数据库,由于我的Ubuntu Linux是裸装的php(目前只编译了 ...
 - web基础知识通信概述URI与http
			
1.url是什么,有什么作用: 说白了就是我们常说的网址:正规来说就是统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址. 互联网上的每个文件都有一个 ...
 - Hibernate学习(五)lazy属性学习(true和extra区别)
			
Lazy(懒加载)在hibernate何处使用:1.<class>标签上,可以取值:true/false,(默认值是:true)2.<property>标签上,可以取值:tru ...