assert(pMap != NULL)错误的解决办法
来源:互联网 发布:java学的不好怎么办 编辑:程序博客网 时间:2024/05/22 00:23
最近在使用mfc进行多线程程序开发的过程中,由于需要实时在某个控件上进行数据更新操作,因此将某个控件进行了变量绑定,通过改变变量进行数据更新操作,但是每次都显示错误导致程序不能运行,具体指向wincore.cpp文件的972行:
// should also be in the permanent or temporary handle map
CHandleMap* pMap = afxMapHWND();
ASSERT(pMap != NULL);
在网上查了很多资料都没有解决方法,经过多次打尝试之后,发现只要将UpdateData()函数进行注释后,程序就能正常运行了,通过查看相关的资料觉得问题产生的原因如下:
1、 mfc的大多数类不是线程安全的,调用传入对象的成员函数可能不会报错,但是未必能达到程序预定的功能!
2、 mfc与界面有关的类,其大多数成员方法都是通过sendmessage实现的,如果消息处理函数本身不是线程安全的,你从工作线程中调用这些方法迟早会同你界面线程的用户消息响应发生冲突;
3、对于CWnd相关的类,即使传入窗口句柄,有时操作也会引起异常(ASSERT异常):通过句柄获取窗口对象并且调用其成员函数或者成员变量!因为该对象是临时对象,访问其成员变量没有意义,访问其成员函数可能会抛出异常!
所以在需要实时更新控件显示信息的时候,应该自定义消息进行处理,不要使用mfc提供的消息映射机制。
参考自:http://www.cnblogs.com/yan-boy/archive/2012/09/08/2676154.html
0 0
- assert(pMap != NULL)错误的解决办法
- assert(pMap != NULL)错误的解决办法
- 多线程中遇到ASSERT(pMap->LookupPermanent(hWndOrig) == NULL);如何解决
- 触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因
- 莫名其妙的遇到ASSERT(m_pDocManager != NULL);错误
- 触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因
- 触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因
- 触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因
- 触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因
- 触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因
- 触发ASSERT(afxCurrentResourceHandle != NULL)错误的原因
- appcore.cpp ASSERT(AfxGetThread() == NULL);错误
- CSocket断言错误 ASSERT(pState->m_hSocketWindow != NULL);
- ASSERT(m_pCtrlSite != NULL)
- ASSERT(m_pCtrlSite != NULL);
- gtk程序运行报 main_loop!=NULL 错误的解决办法
- 要死的ASSERT(AfxGetThread() == NULL)问题--解决
- getDrawingCache()=null的解决办法
- 匀速运动
- Hessian探究(一)Hessian与Spring结合
- 被科技盗去的时光
- ubuntu修改静态IP、设置dns地址
- 变长数组
- assert(pMap != NULL)错误的解决办法
- oracle中关于count(1)、count(*)、count(rowid)、count(某个字段)使用上的区别和性能问题
- Android中的回调(上)
- 【原创】浅谈搜索-中(dfs)(红与黑,Dungeon Master)
- 仪表的二线制、三线制、四线制
- Maven项目mybatis Invalid bound statement (not found)解决方法
- 序列化与反序列化之Parcelable和Serializable浅析
- 谁用掉了我的数据库空间?
- android api23 抛弃了httpClient,许多基于httpClient第三方库怎么办?