我正在制作scrobbler,我希望我的节目在歌曲改变之后等待10秒,然后才会sc。不安。我一直在使用睡眠,但我意识到,如果在这10秒内歌曲发生变化,程序会提交旧歌并获得新歌。我想如果我改变歌曲,代码重新开始。
我正在使用音乐播放器守护程序(MPD)和libmpd来获取歌曲标签。
注意:程序在Unix下。
答案 0 :(得分:2)
它取决于你的程序如何工作,但原则上,最简单的方法是继续使用睡眠和检查用户是否在发送数据之前更改了歌曲(睡眠后有回)。因此,不是“尝试更好地睡觉”,而是“在发送之前检查您发送的数据是否真正有效”。
另一种可能性是使用暂停超时或epoll
等待timerfd
,并通过eventfd
通知歌曲更改。如果你需要可靠的线程间通信和准备就绪通知,那么它具有“免费”的优势,你最有可能这样做(显然你必须至少有一个额外的GUI线程,否则用户将无法更改歌曲而你在阻止)。
答案 1 :(得分:1)
sleep()
系统调用并使其提前返回。您的应用程序只需要在适当的时候处理早期返回。根据您的实施情况,这可能不合适,但它可能会为您提供快速解决方案。