首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++我可以使用什么代替睡眠()函数?

C++我可以使用什么代替睡眠()函数?
EN

Stack Overflow用户
提问于 2011-04-22 17:46:00
回答 2查看 1.2K关注 0票数 4

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

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

注:程序是Unix下的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-22 17:58:44

这在很大程度上取决于你的程序是如何工作的,但原则上,最简单的方法是继续使用sleep和检查用户在发送数据之前(在睡眠恢复后)是否更改了歌曲。因此,不是“试着睡得更好”,而是“在发送之前检查你发送的数据是否真的有效”。

一种不同的可能性是使用休眠超时来等待epoll,或者更好地在timerfd上等待,并通过eventfd通知歌曲改变。这样做的好处是,如果您需要可靠的线程间通信和就绪通知,那么它是“免费的”,而您很可能需要这样做(显然,您必须至少有一个额外的GUI线程,否则当您阻塞时,用户将无法更换歌曲)。

票数 2
EN

Stack Overflow用户

发布于 2011-04-22 21:52:13

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5754239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档