C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 在等待某个事件时如何不占用CPU?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我想写一些唤醒(或睡到)某些事件的代码.

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

代码

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

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

解决方法

问题在于std :: this_thread:sleep_until(..)的实现,它@L_262_7@sleep_for(..),@L_262_7@nanosleep().

(见gnu sources,第271行.)

请参阅以下Stackoverflow问题:

> nanosleep high cpu usage?(Linux高cpu问题称为nanosleep.)
> boost::this_thread::sleep() vs. nanosleep()?

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

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

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

大佬总结

以上是大佬教程为你收集整理的c – 在等待某个事件时如何不占用CPU?全部内容,希望文章能够帮你解决c – 在等待某个事件时如何不占用CPU?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。