gpt4 book ai didi

c++ - 如何在等待某些事件时不占用 CPU?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:00 25 4
gpt4 key购买 nike

我想编写一些代码来唤醒(或休眠直到)某个事件。

我有一段代码在某些事件发生之前一直处于休眠状态,例如当时钟发出警报时。

伪代码:

int main() {
TimePoint someTp("3PM");
std::this_thread::sleep_until(someTP);
}

这是我当前的实现,但它占用了我大约 10% 的 CPU 能力。我认为我的设计有缺陷,有没有更好的解决方案?非常感谢!

最佳答案

问题出在 std::this_thread:sleep_until(..) 的实现中,它调用了 sleep_for(..),它调用了 nanosleep()

(参见 gnu sources,第 271 行。)

请参阅以下 Stackoverflow 问题:

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

如果您确实需要亚秒分辨率,我推荐调用 select() 而不是 nanosleep() 的技术。 select() 旨在非常有效地阻止亚秒级延迟,并且大多数操作系统都足够准确地遵守超时参数,因此它对于亚秒级计时很有用,同时让出 CPU。

你甚至可以创建一个用于传递给select()的socket,在error_fds参数中,这里的socket可以作为跨线程使用”信号”,当它被传递给 close() 并变成一个“错误”状态套接字时。

关于c++ - 如何在等待某些事件时不占用 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6296069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com