为什么我的VC++多线程程序的CPU资源使用率总是100%?高分请教各位大虾了!!!

weiyunfei 2002-05-07 01:51:19
我的程序是基于对话框的,程序启动后,首先创建8个线程,而后很自然的进入到各自的Run()循环函数中,我的Run函数大致如下:
int CLineThread::Run()
{

MSG msg;

while(TRUE)
{
if (PeekMessage (&msg, 0, WM_NULL, WM_NULL, PM_REMOVE))
{
switch(msg.message)
{
case WM_QUIT:
g_nDeadedThreads ++;
if(g_nDeadedThreads == g_nLine)
SetEvent(g_ThreadEvent);
goto end;
default:
break;
}
}
}

end:return CWinThread::Run();
}
此时可以看到CPU的占有率是100%,如果我只创建1个线程,发现CPU的占有率也是100%,这说明基本与线程数目无关。程序结束时,向各个线程

发送WM_QUIT消息,if(g_nDeadedThreads == g_nLine)用来判断是否所有的线程都收到WM_QUIT消息,g_nLine为所创建的线程数。而且我的程

序经常造成计算机死机,不知这是否与CPU的100%占有率有关?
1。是否我的程序有问题;
2。我该如何写这段程序,尤其是Run函数;
3。无论如何这么简单的程序不可能使CPU有的100%占有率的,我该如何解决CPU有的100%占有率问题。
请教各位了!!!急!!!
...全文
394 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiyunfei 2002-05-07
  • 打赏
  • 举报
回复
我的计算机第一次死机是在程序启动后的3天后,我发现后就重启,没过3个小时就又死机了,是不是也是这个原因造成的???
weiyunfei 2002-05-07
  • 打赏
  • 举报
回复
第一次死机是程序启动的3天后,我发现死机后就重启,没过3个小时又死机了,
我的计算机死机的原因也是这个,对吗?
mryinliang 2002-05-07
  • 打赏
  • 举报
回复
对呀,你要休眠一会
用sleep()
xiulun 2002-05-07
  • 打赏
  • 举报
回复
你的程序没有让cpu空闲,当然cpu是100%的被占用了,通常线称要留一些时间给cpu做其他事情的,例如Sleep()和事件等待函数,PeekMessage并不是时间响应函数,所以有无消息到达,它都返回,因此循环一直在执行,cpu当然没空闲时间了,要解决这个问题,通常用事件函数:WaitForSingleObject或WaitForMultipleObjects.
wumugulu 2002-05-07
  • 打赏
  • 举报
回复
在while循环里的最后加一句:

Sleep(10);

15,471

社区成员

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

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