我可以用什么代替sleep()函数?
C++ What can I use instead sleep() function?
我正在构建洗涤器,我希望我的程序在歌曲更改后等待10秒,然后再进行洗涤。我一直在使用睡眠,但我意识到,如果歌曲在这10秒内改变,程序提交老歌并获得新歌。我想如果我换了歌,代码就会重新开始。
我正在使用音乐播放器守护程序(MPD)和libmpd来获取歌曲的标签。
这在很大程度上取决于您的程序如何工作,但原则上,最简单的方法是继续使用sleep,并在发送数据之前(在sleep返回之后)检查用户是否更改了歌曲。所以,我们的目标不是"试着睡得更好",而是"在发送之前检查你发送的数据是否真的有效"。
另一种可能性是使用睡眠超时或更好的timerfd
等待epoll
,并通过eventfd
通知歌曲更改。这样做的好处是,如果你需要可靠的线程间通信和准备通知,那么它是"免费的"(显然你必须至少有一个额外的GUI线程,否则用户将无法在你阻塞时更改歌曲)。
Damon的建议很好,可能是一个更好的整体设计。如果你正在寻找一些快速的东西,你可以考虑简单地在歌曲改变时向你的应用程序发送一个信号。这将中断sleep()
系统调用并使其提前返回。然后,您的应用程序只需要适当地处理提前返回。根据您的实现,这可能不合适,但它可能会给您一个快速修复。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 在定时器回调函数中使用 Sleep() 会导致C++出现问题吗?
- 为什么Main函数上的Sleep()会停止所有线程
- Windows.h Sleep(int) 函数是否浪费?
- 在Xcode(mac api)上,是否有任何带有Sleep()函数/命令的文件?
- 线程中的 sleep() 函数的目的是什么?
- 为什么函数 sleep() 在 klee 执行 Objectfile 时不能工作?
- C++函数 Sleep() 在一段代码之前执行
- 为什么sleep in函数忽略了程序中的几个顺序指令
- Sleep() 函数之前的代码不起作用
- 如何在不使用 sleep() 的情况下使用 ontimer 函数延迟进程
- Sleep()函数用法
- WinAPI Sleep()函数调用的睡眠时间比预期的要长
- 解释在Android上执行的Unix sleep()函数的行为
- 我可以用什么代替sleep()函数?