线程中for循环无规律乱走

patrick_880520 2011-11-15 11:31:48
for(g=0;g<7;g++)
{
CString downloadLog=L"";
cProgress.Format(L"%d",g);
cProgress=cProgress+L"/"+L"7";

SendMessage(pdlg->m_hWnd,WM_UI_INSERTCOL,0,0);

Result=GetDosResult(fastboot[g]);

SendMessage(pdlg->m_hWnd,WM_UI_SHOWLISTBOX,0,0);
if(Result.Find(L"OKAY")==-1)
{
cProgress=L"Download fail";
SendMessage(pdlg->m_hWnd,WM_UI_INSERTCOL,0,0);
return 0;
}
}
这段代码是在线程中,我跑了很多次,大多数情况下没走到if判断语句就直接回到for循环开始并且g没有+1,接下来往下跑,GetDosResult(fastboot[g]),或者sendmessage(UI操作的消息)可能连续执行两次,导致UI显示乱了,有谁来分析下原因呢
...全文
191 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
dfasri 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 patrick_880520 的回复:]
没错,你答对了,的确实产生新线程干扰,不过不是sendmessage的问题吧,如果没有生成新线程干扰,sendmessage被block也没关系吧
[/Quote]
有没有关系, 留待你自己研究研究吧.
patrick_880520 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dfasri 的回复:]
是你在线程里面用SendMessage, 导致当前线程被Block住, 然后主线程影响SendMessage的消息, 又产生了新的线程来运行这段代码, 然后你在Debug的时候就会出现一段代码Debug位置乱走的情况出现.

多线程里面UI不能够用在线程里面用SendMessage的. 只能PostMessage.

你在Debug下, 你可以先跟踪着第一次, 然后记下当前的线程号, 然……
[/Quote]
没错,你答对了,的确实产生新线程干扰,不过不是sendmessage的问题吧,如果没有生成新线程干扰,sendmessage被block也没关系吧
dfasri 2011-11-16
  • 打赏
  • 举报
回复
是你在线程里面用SendMessage, 导致当前线程被Block住, 然后主线程影响SendMessage的消息, 又产生了新的线程来运行这段代码, 然后你在Debug的时候就会出现一段代码Debug位置乱走的情况出现.

多线程里面UI不能够用在线程里面用SendMessage的. 只能PostMessage.

你在Debug下, 你可以先跟踪着第一次, 然后记下当前的线程号, 然后当你发现Debug的位置突然改变了以后, 你可以再看看当前的线程号, 肯定变得不一样了.
Daisy__Ben 2011-11-16
  • 打赏
  • 举报
回复
如果程序里有编译器没有检查出的错误,单步跟踪就会乱跑。只知道这种最简单的情况
patrick_880520 2011-11-15
  • 打赏
  • 举报
回复
我只发了一遍,怎么变成两个贴了,晕

回复3楼:
试过很多次了,用sendmessage执行消息后返回是为了保证UI显示和执行内容一致
峰白 2011-11-15
  • 打赏
  • 举报
回复
release模式下调试的时候见过程序乱走,debug下没见过
你可以clean后重新编译次试试

在线程中用PostMessage不是更好?
Eleven 2011-11-15
  • 打赏
  • 举报
回复
又发一遍?
请叫我涛哥0-0 2011-11-15
  • 打赏
  • 举报
回复
你那程序不就if完就到了for下一次了吗?
patrick_880520 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 gameslq 的回复:]
引用 8 楼 patrick_880520 的回复:

只有一个工作线程

工程里选择了使用多线程库了吗,如果多线程序用单线程库就会有问题
核对下
[/Quote]
不知道怎么选,不过之前用多线程编程没什么问题啊
gameslq 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 patrick_880520 的回复:]

只有一个工作线程
[/Quote]
工程里选择了使用多线程库了吗,如果多线程序用单线程库就会有问题
核对下
patrick_880520 2011-11-15
  • 打赏
  • 举报
回复
只有一个工作线程
priest334 2011-11-15
  • 打赏
  • 举报
回复
是不是同时起了几个线程?多个CPU执行的
onlycs 2011-11-15
  • 打赏
  • 举报
回复
在里面多加一些输出日志,通过日志来分析

15,471

社区成员

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

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