编写服务以降低CPU使用率

时间:2019-01-15 18:40:57

标签: c++ windows cpu-usage

我正在使用C编写Windows服务,使用下面的经典示例: https://docs.microsoft.com/en-us/windows/desktop/Services/svc-cpp。我试图了解为什么不执行任何操作时服务的CPU使用率为25%。

我几乎拿走了我所有的代码,只剩下了原始的骨架程序。基本上,它处于紧密循环中,在其中检查服务停止命令,然后检查Sleep(0),然后循环返回。在我的真实代码中,我正在侦听一个tcp连接,但这在此测试中不可行。

VOID SvcInit( DWORD dwArgc, LPTSTR *lpszArgv)
{
// initialization code not shown here

// Main loop
while(TRUE) {

// Check whether to stop the service.

ret=WaitForSingleObject(ghSvcStopEvent, 0);
if (ret == 0) {
  com_Log("Stop command received from service manager");
  break;
}

Sleep(0);

// This is where the service looks for work to do, but disabled for 
 testing

}

// shutdown code here

}

我以为Sleep(0)是将控制权返回给操作系统的原因,那么为什么这段代码会表现不佳并占用大量CPU?

1 个答案:

答案 0 :(得分:0)

Sleep(0)已经讨论过here

由于您将使CPU不执行任何操作(占23%),因此此功能将立即返回。尝试将其替换为Sleep(value)(以毫秒为单位的值),以减少CPU使用量。