首页 > 解决方案 > 为低 CPU 使用率编写服务

问题描述

我正在使用 C 语言编写 Windows 服务,使用此处找到的经典示例: https ://docs.microsoft.com/en-us/windows/desktop/Services/svc-cpp 。我试图理解为什么我的服务在不做任何事情时的 CPU 使用率为 25%。

我已经取出了几乎所有的代码,只留下了原始的骨架程序。基本上它处于一个紧密的循环中,它检查服务停止命令,然后是睡眠(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 资源呢?

标签: c++windowscpu-usage

解决方案


Sleep(0)已经在这里讨论过了。

因为你会让你的 CPU 什么都不做 (23%) 这个函数会立即返回。尝试将其替换为Sleep(value)(以毫秒为单位的值)以实际减少您的 CPU 使用率。


推荐阅读