这几天在做一个网络诊断的工具。用到两个线程:
界面线程:界面是一个对话框。在对话框上有一个进度条。
工作线程:执行检测的工作。并把对各项的检测结果以自定义消息发送给界面线程,让它呈现出来...
我定义了一个消息:#define WM_SETPROGRESS WM_USER + 105
//设置进度条的进度
然后每检测完一项后,用PostMessage向界面线程发送WM_SETPROGRESS消息。就出现不正常的现象。比如我已检测完一类的进度,现在想检测另一类的,所以我要重新设置一个范围(SetRange(0,100))和一个新的位置(SetPos(0)),但好像并没有执行。还是前一类检测完后的进度。
如果在工作线程中用一个循环不断的post消息,结果只处理了一小部分的消息。即:
[工作线程中]
for(int i=1;i<=100;i++)
{
PostMessage(m_hWnd,WM_SETPROGRESS,i,0);
}
用SendMessage代替PostMessage,处理得更好一些。因为可以看到进度条的进度更长些,但也只显示了不到一半的进度...
如果把对话框对象指针传递给工作线程,在那里调用SetPos,进度条就工作的很好...
posted on 2006-08-22 10:50
冰风谷 阅读(2008)
评论(2) 编辑 收藏 引用 所属分类:
存疑待解