我有一段代码可以在某些事件发生之前休眠,例如在被时钟警告时.
伪代码:
int main() { TimePoint someTp("3PM"); std::this_thread::sleep_until(someTP);}
这是我目前的实现,但这占据了我cpu功耗的10%左右.我认为我的设计有缺陷,有没有更好的解决方案呢?提前谢谢了!
解决方法 问题在于std :: this_thread:sleep_until(..)的实现,它调用sleep_for(..),调用nanosleep().(见gnu sources,第271行.)
请参阅以下Stackoverflow问题:
> nanosleep high cpu usage?(linux高cpu问题称为nanosleep.)
> boost::this_thread::sleep() vs. nanosleep()?
您似乎不需要nanosleep()的高分辨率.您可以使用许可的开源许可编写自己的解决方案,并调用sleep()而不是nanosleep().
如果你确实需要亚秒级分辨率,我建议调用select()而不是nanosleep()的技术. select()设计用于非常有效地阻塞亚秒延迟,并且大多数 *** 作系统都足够准确地遵守超时参数,这对于在产生cpu时的亚秒级时序非常有用.
您甚至可以创建一个套接字,以便传递给select(),在error_fds参数中,当套接字传递给close()并成为“错误”状态套接字时,套接字可用作跨线程“信号” .
总结以上是内存溢出为你收集整理的c – 在等待某个事件时如何不占用CPU?全部内容,希望文章能够帮你解决c – 在等待某个事件时如何不占用CPU?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)