我正在使用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?
答案 0 :(得分:0)
Sleep(0)
已经讨论过here。
由于您将使CPU不执行任何操作(占23%),因此此功能将立即返回。尝试将其替换为Sleep(value)
(以毫秒为单位的值),以减少CPU使用量。