百分求助:线程传递消息有时出现乱码

iamiking 2003-07-10 11:22:01
各位大侠帮帮忙
我在一个线程里面用遍历一个文件夹下的文件
并向View类里面传递文件信息
CString str;
str = filename;(设filename已定义)
m_pView->PostMessage(WM_SHOW_MESSAGE,0,(LPARAM)(LPCTSTR)str);
View类里面定义了WM_SHOW_MESSAGE
在相应的程序里面用
CString str=(LPCTSTR)lParam;
m_listMsg.AddString(str);
把传递的消息显示到一个列表框中
但是有时会出现乱码
“茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸”
“屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯”


请问大侠们这是怎么回事?
应如何解决?
...全文
71 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
farfh 2003-07-11
  • 打赏
  • 举报
回复
使用SendMessage
sxmzmxh 2003-07-11
  • 打赏
  • 举报
回复
没有初始化
wuchuncai 2003-07-11
  • 打赏
  • 举报
回复
直接将CString str设为全局变量。
filename要正确,肯定就没问题
hujun614 2003-07-11
  • 打赏
  • 举报
回复
但是有时会出现乱码
“茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸茸”
“屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯”
很多时候这种问题都是由于字符串的某些操作没有收尾造成的。
比如应该手动结束字符串, aaa[xxx] = 0;
wuwind 2003-07-11
  • 打赏
  • 举报
回复
临时变量的问题
FBStudio 2003-07-10
  • 打赏
  • 举报
回复
在向视类发送消息时(m_pView->PostMessage(WM_SHOW_MESSAGE,0,(LPARAM)(LPCTSTR)str))
str是线程中的局部变量,频繁受线程更新的影响。假设发第二条消息时,视类中刚读了一部分文本,马上就被线程中的代码改变了内容,这时会乱套的。如果str的生命期结束,在视类中访问到的(LPCTSTR)lParam指向的就是无效的地址,其内容是随机的,当然就是乱码。
解决方法需区分上述两种情况而定,把PostMessage改为SendMessage可确保解决问题,但会影响效率。也可在PostMessage前为str动态分配内存,同时在视类中显示完消息文本后,释放为str所分配的内存。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧