c++ - 为低 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 资源呢?
解决方案
Sleep(0)
已经在这里讨论过了。
因为你会让你的 CPU 什么都不做 (23%) 这个函数会立即返回。尝试将其替换为Sleep(value)
(以毫秒为单位的值)以实际减少您的 CPU 使用率。
推荐阅读
- java - 使用 MySQL 数据库进行 Java Spring Boot 测试
- c - _mm_set1_ps 和 _mm_set_ps1 有什么区别?
- reactjs - 在 api 获取请求失败后,在另一个异步函数内部重新调用 useEffect 中的异步函数
- python - 使用 selenium 转到列表的下一页
- postgresql - Windows 上的 PostgreSQL 12.0 Git Bash 与 createDB 苦苦挣扎
- css - 如何在类似表格的列中垂直居中元素?
- daml - 操作模板中的记录
- java - Spring Boot - 从 YML 文件为类成员赋值 - 空指针异常
- reactjs - 创建新的 Stock List Item 不会打开 Materialise Modal,但初始状态项目有效
- excel - 如果所有 4 个单元格都为 0,则忽略行;如果 4 个单元格中的任何一个大于 0,则获取名称