奇怪!高手请进!

maomao2332 2003-10-17 04:02:54
void Function3()
{
...
hFun3ThreadHandle=CreateThread(...);
...
}
UINT Function2(LPVOID pParam)
{
...
Funciton3(); //Function3也创建一个线程hFun3ThreadHandle并运行之
::WaitForSingleObject(hFun3ThreadHandle,INFINITE);
MessageBox(NULL,"finished","Ok",MB_OK);
return 0;
}
void CMainFrame::OnFunction1()
{
...
COneDlg dlg;
if(IDOK==dlg.DoModal())
{
...
CWinThread* pThread=AfxBeginThread (Function2,0,THREAD_PRIORITY_NORMAL,0,
0,0);
}

}
现在:发现开始时程序运行正常(CPU得使用<5%),但是一旦出现MessageBox()提示后,程序开始“无响应”,必须强制关闭它,此时从任务管理器可看见CPU使用是100%,我认为此时的程序应该结束了(实际上,程序的功能也是已经实现了),但是不知道为什么会出现这种情况阿?
...全文
33 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿甘 2003-10-17
  • 打赏
  • 举报
回复
为什么要不停完全刷新界面呢?
阿甘 2003-10-17
  • 打赏
  • 举报
回复
function3的线程是什么功能
maomao2332 2003-10-17
  • 打赏
  • 举报
回复
忘了:我在MessageBox()语句后还有
CRect rect;
GetClientRect(AfxGetMainWnd()->m_hWnd,&rect);
InvalidateRect(AfxGetMainWnd()->m_hWnd,&rect,FALSE);
发现,如果删掉它们,cpu得占用率不会上升到100%,但是我把程序最小化后发现CPU的使用又变成100%,说明是因为发送了Invalidate命令使得cpu的占用率达到100%,但是我的Function3中创建的那个线程也有这3条语句,并且界面更新的也是正确,为什么这里就会不对呢!
maomao2332 2003-10-17
  • 打赏
  • 举报
回复
没有拉,Function3开了个线程,但这个线程怎么可能运行Function3呢?
阿甘 2003-10-17
  • 打赏
  • 举报
回复
Function3是不是也开了一个线程运行Function3啊?

这样的话当然是无限制开线程,不死锁才怪
maomao2332 2003-10-17
  • 打赏
  • 举报
回复
我尝试过删掉MessageBox这个语句,但是发现问题不再者里阿
阿甘 2003-10-17
  • 打赏
  • 举报
回复
删掉MessageBox这行试试

15,471

社区成员

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

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