CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

关于UpdateData的奇怪问题

楼主simonchenxu(天乱博远)2003-12-04 18:44:53 在 VC/MFC / 基础类 提问

我有一个CMyView,其中含有一个有关串口通讯的类CMyCom,还有一个dlg  
  我create了dlg,然后把dlg的指针传给了CMyCom的东东。  
  我的MyCom响应串口事件,如果有收到字符,那么调用p_dlg->AddChar(ch)  
  AddChar是dlg的一个成员,在view中调用没有问题。  
  AddChar(char   ch){  
      UpdateData(true);  
      m_str   +=   ch;  
      UpdateData(false);  
  }  
  奇怪的是,我的MyCom里面调用p_dlg->AddChar(ch)运行到UpdateData(true);就报错!非常不解  
  怎么解决呀~谢谢 问题点数:100、回复次数:6Top

1 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2003-12-04 18:54:14 得分 10

檢查你的p_dlg是否是空的....Top

2 楼alphapiao(奉旨灌水钦差)回复于 2003-12-04 18:55:55 得分 10

m_str是不是还没有初始化Top

3 楼flyelf(空谷清音)回复于 2003-12-04 18:56:43 得分 30

用消息的方式吧,在MyCom中给p_dlg发送消息,让对话框的消息响应中进行updatedata()Top

4 楼zeroxy(水蓝)回复于 2003-12-04 19:07:44 得分 50

我猜想是因为你是使用异步方式进行通信,所以串口的接收与主线程是两个线程,而Dlg不是线程安全的所以无法对主线程的界面进行更新,经验告诉我你这样做是不规范的。  
  我建议你在收到字符后保存到一个变量中,然后使用窗口消息通知dlg更新。  
  如果只是一个字符的话,可以在消息参数中一起传过去  
  也就是说在收到字符后。  
  SendMessage(p_dlg->GetSafeHwnd(),WM_USER_ADDCHAR,(WPARAM)ch,0),Top

5 楼simonchenxu(天乱博远)回复于 2003-12-04 19:19:48 得分 0

解决了,用的是消息方式,其实我也想到了  
  只是不明白突然UpdateData不能用了Top

6 楼checkyvc6(已所不欲,勿施于人)回复于 2003-12-04 19:31:16 得分 0

典型的线程不安全例子!  
   
  看看窗口类指针和窗口句柄的映射关系就知道了,指针和窗口句柄的映射关系保存在一个哈西表中,而这个哈西表只是当前线程有效.故如果在其他线程里面访问的话,通过调用  
  afxMapHWND()函数是得不到这个表的指针的。Top

相关问题

  • 遇到一个很奇怪的Updatedata()问题!
  • UpdateData()??
  • 奇怪,奇怪
  • 奇怪,奇怪!
  • 奇怪奇怪???
  • 奇怪!奇怪
  • 奇怪奇怪...........?????...........
  • 奇怪!奇怪!真奇怪!!!
  • 奇怪奇怪真奇怪
  • 奇怪???奇怪??奇怪???

关键词

  • 线程
  • 字符
  • 指针
  • 消息
  • addchar
  • updatedata
  • dlg
  • 调用
  • mycom
  • 收到字符

得分解答快速导航

  • 帖主:simonchenxu
  • beyondtkl
  • alphapiao
  • flyelf
  • zeroxy

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo