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

时间:2011-04-22 09:46:00

标签: c++ linux timer

我正在制作scrobbler,我希望我的节目在歌曲改变之后等待10秒,然后才会sc。不安。我一直在使用睡眠,但我意识到,如果在这10秒内歌曲发生变化,程序会提交旧歌并获得新歌。我想如果我改变歌曲,代码重新开始。

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

注意:程序在Unix下。

2 个答案:

答案 0 :(得分:2)

它取决于你的程序如何工作,但原则上,最简单的方法是继续使用睡眠和检查用户是否在发送数据之前更改了歌曲(睡眠后有回)。因此,不是“尝试更好地睡觉”,而是“在发送之前检查您发送的数据是否真正有效”。

另一种可能性是使用暂停超时或epoll等待timerfd,并通过eventfd通知歌曲更改。如果你需要可靠的线程间通信和准备就绪通知,那么它具有“免费”的优势,你最有可能这样做(显然你必须至少有一个额外的GUI线程,否则用户将无法更改歌曲而你在阻止)。

答案 1 :(得分:1)

达蒙的建议很好,可能是更好的整体设计。如果您正在寻找快速的东西,您可以考虑在歌曲发生变化时向您的应用程序发送信号。这将中断sleep()系统调用并使其提前返回。您的应用程序只需要在适当的时候处理早期返回。根据您的实施情况,这可能不合适,但它可能会为您提供快速解决方案。