在等待某个事件时如何不占用CPU?

wil*_*ill 6 c++ events multithreading c++11

我想写一些唤醒(或睡到)某些事件的代码.

我有一段代码可以在某些事件发生之前休眠,例如在被时钟警告时.

伪代码:

int main() {
  TimePoint someTp("3PM");
  std::this_thread::sleep_until(someTP);
}
Run Code Online (Sandbox Code Playgroud)

这是我目前的实现,但这占据了我CPU功耗的10%左右.我认为我的设计有缺陷,有没有更好的解决方案呢?提前谢谢了!

Hea*_*utt 8

问题在于执行 std::this_thread:sleep_until(..)哪些调用sleep_for(..),哪些调用nanosleep().

(参见gnu消息来源,第271行.)

请参阅以下Stackoverflow问题:

您似乎不需要高分辨率nanosleep().您可以使用许可的开源许可编写自己的解决方案,而sleep()不是调用nanosleep().

如果你确实需要亚秒级分辨率,我建议使用调用技术select()而不是nanosleep(). select()设计用于非常有效地阻止亚秒延迟,并且大多数操作系统足够准确地遵守超时参数,这对于亚秒定时同时产生CPU是有用的.

您甚至可以创建一个套接字,以便select()error_fds参数中传递给套接字,当套接字传递给close()并成为"错误"状态套接字时,套接字可用作交叉线程"信号" .