防止Windows线程(_beginThread)占用太多CPU?

时间:2012-06-28 11:57:44

标签: visual-c++ cpu-usage

我使用了最小化托盘VC ++示例中的一个来创建一个程序,它会每隔一段时间弹出一条消息,提醒我休息一下。

程序是这样的:

  startTime = time(0);
  g_hInstance=hInstance;

  HWND hWnd=CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DialogProc);
  if(hWnd)
  {
    MSG msg;
    _beginthread(&checkEyeRestTime, 0, 0);  
    while(GetMessage(&msg,hWnd,0,0))
    {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
  }

和checkEyeRestTime函数:

void checkEyeRestTime(void* ptr)
{
    while( true )
    {
     //logic to check time and display message
    }//while

    _endthread();
}

但是这个程序在双核处理器上占用50%的CPU。如何减轻处理器的负载?

2 个答案:

答案 0 :(得分:2)

或在线程中插入Sleep(0)。这允许其他线程获得一些时间。

如果这没有用,你可以增加睡眠时间。

答案 1 :(得分:1)

使用timer event代替轮询循环。