求救,线程

meistone 2004-07-15 11:06:27
我原来是在程序中直接读一个大文件,在读文件的中向主窗口发送消息来更新状态栏中的进度条,但是实际上在读文件的时候进度条根本不会更新,只是在读完文件之后才一下子全部更新。
后来我把读文件的操作放在一个另外的线程中,现在进度条是更新了,但是我想在读文件的时候,光标变成等待状态却不知道怎么来实现了,请各位高手指点。
...全文
102 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinsou 2004-07-16
  • 打赏
  • 举报
回复
用OnTimer啊
CProgressCtrl* pBar = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);
pBar->SetPos(pos);

SetTimer(1, 100, NULL);
应该很好办的
holyeagle 2004-07-15
  • 打赏
  • 举报
回复
由于WM_PAINT消息的响应级别很低,在你调用文件读写的时---比如说在Dialog上点击button,系统通过消息调用你的函数,你这个函数没有完成时,WM_PAINT无法响应,你的进度条就无法更新。

你可以自己手动分发消息
BOOL PeekAndPump()
{
static MSG msg;
while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
{
if(!AfxGetApp()->PumpMessage())
{
::PostQuitMessage(0);
return FALSE;
}
}

return TRUE;
}

这是个笨办法,希望有更好的解决方案。
huang_yu 2004-07-15
  • 打赏
  • 举报
回复
在你的工作线程启动时,发条消息给界面,要求更改鼠标形状;
线程工作完成了,再发条消息给界面,把鼠标形状改回来;
这样就行了。
meistone 2004-07-15
  • 打赏
  • 举报
回复
我如果用原来的方法,有没有办法实现进度条的实时更新呢?
xiaoqiqixiao 2004-07-15
  • 打赏
  • 举报
回复
需要响应WM_SETCURSOR或WM_MOUSEMOVE消息,在它们的消息处理中SetCursor
meistone 2004-07-15
  • 打赏
  • 举报
回复
huang_yu(HY)
你的方法好象不行啊,光标不会改变啊!

还有好方法没?

15,473

社区成员

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

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