我可以用什么代替sleep()函数?

C++ What can I use instead sleep() function?

本文关键字:函数 sleep 什么 我可以      更新时间:2023-10-16

我正在构建洗涤器,我希望我的程序在歌曲更改后等待10秒,然后再进行洗涤。我一直在使用睡眠,但我意识到,如果歌曲在这10秒内改变,程序提交老歌并获得新歌。我想如果我换了歌,代码就会重新开始。

我正在使用音乐播放器守护程序(MPD)和libmpd来获取歌曲的标签。

这在很大程度上取决于您的程序如何工作,但原则上,最简单的方法是继续使用sleep,并在发送数据之前(在sleep返回之后)检查用户是否更改了歌曲。所以,我们的目标不是"试着睡得更好",而是"在发送之前检查你发送的数据是否真的有效"。

另一种可能性是使用睡眠超时或更好的timerfd等待epoll,并通过eventfd通知歌曲更改。这样做的好处是,如果你需要可靠的线程间通信和准备通知,那么它是"免费的"(显然你必须至少有一个额外的GUI线程,否则用户将无法在你阻塞时更改歌曲)。

Damon的建议很好,可能是一个更好的整体设计。如果你正在寻找一些快速的东西,你可以考虑简单地在歌曲改变时向你的应用程序发送一个信号。这将中断sleep()系统调用并使其提前返回。然后,您的应用程序只需要适当地处理提前返回。根据您的实现,这可能不合适,但它可能会给您一个快速修复。