MFC 用户界面线程消息循环问题

桃家山小邓 2017-06-26 05:52:48
while( (dwRead = ReadFile.Read(pBuf, dwStep)) > 0 )
{//读取源文件,一次一块
//将读取的数据写入目标文件中
WriteFile.Write( pBuf, dwRead );
dwCompleteSize += dwRead;
pInfo->m_nSpeed += dwRead;
//更新进度
while(!pInfo->pUIThread->PostThreadMessage(WM_THREADINFO, 3, (LPARAM) int((dwCompleteSize*1.0 / dwTotalSize) * 100)))
{
Sleep(10);
}
}
//完成
delete pBuf;
//关闭文件
ReadFile.Close();
WriteFile.Close();
//发送结束消息,用于关闭进度显示模块
if (!pInfo->pUIThread->PostThreadMessage(WM_THREADINFO, 10, 1))
{
Sleep(10);
}
//pInfo->KillTimer(1);
//pInfo->KillTimer(2);
pInfo->m_stTip.SetWindowText("复制完成!");

在一个工作线程函数里面,发送用户界面消息;用户界面处理函数如下
//显示消息处理函数
void CcbCopyFile::OnThreadInfo(WPARAM wParam,LPARAM lParam)
{
if (wParam == 0)
{//源文件路径参数
m_szSrcPath.Format("%s",lParam);
//AfxMessageBox(m_szSrcPath);
}
else if (wParam == 1)
{//目标文件路径参数
m_szDesPath.Format("%s",lParam);
//AfxMessageBox(m_szDesPath);
}
else if (wParam == 2)
{//启动
m_pProgressDlg = new CCopyFileDlg;
m_pProgressDlg->Create(IDD_DIALOG1);
m_pProgressDlg->m_szSrcPath = m_szSrcPath;
m_pProgressDlg->m_szDesPath = m_szDesPath;
m_pProgressDlg->UpdateData(FALSE);
m_pProgressDlg->ShowWindow(TRUE);
}
else if (wParam == 3)
{//进度
m_pProgressDlg->m_Progress.SetPos(lParam);
}
else if (wParam == 4)
{//速度
m_pProgressDlg->UpdateSpeed(lParam);
}
else if (wParam == 5)
{//时间
float *p = (float *)lParam;
m_pProgressDlg->UpdateTime(*p);
}
else
{//完成
m_pProgressDlg->OnCancel();
}
//return 0;

问题:当运行用户界面线程时,拖动一下用户界面的窗口后,
进度条不会再更新了;如果不拖动,则一切运行正常。
为什么????
...全文
354 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-06-27
  • 打赏
  • 举报
回复
《深入浅出MFC》
桃家山小邓 2017-06-26
  • 打赏
  • 举报
回复
桃家山小邓 2017-06-26
  • 打赏
  • 举报
回复
求大牛!!!

15,471

社区成员

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

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