我目前正在设计一个小型机器人,通过IR信标导航机器人。它全部用C++编码,但整合线路跟踪和IR接收似乎已经破坏了它。 IR使用中断服务程序使用间隔定时器和SIGALRM查找IR信号。寻路功能以及其他一些机器人操作都使用sleep()。现在我注意到,在SIGALRM过早唤醒过程的情况下,您不能在同一个程序中使用SIGALRM和sleep()。除了简单地消除sleep()函数的整个程序之外,是否还有一个很好的解决方法?SIGALRM和睡眠()C++
0
A
回答
0
一个创可贴是使用nanosleep
功能代替sleep
。如果nanosleep
过早醒来,它会将剩余时间存储在时间结构中,因此您可以重新尝试。您可以将其封装在自己的功能中,类似于sleep
。由于nanosleep
从未与SIGALRM
一起实施,所以没有理由为什么它会过早醒来。请务必使用sigaction
设置您的报警信号处理程序,并在标志中指定SA_RESTART
,完全相同。这使您的信号不会干扰可重新启动的系统调用。
+0
谢谢,这完全解决了我的问题!我使用了一个可以递归调用nanosleep的包装器,直到所有时间都过去了,并且中断似乎没有改变暂停时间。 – Bwood94
相关问题
- 1. SIGALRM,间隔定时器和睡眠问题()
- 2. 睡眠和睡眠开始错误
- 3. 睡眠和睡眠有没有区别?
- 4. iPhone和睡眠
- 5. 线程和睡眠()
- 6. Synchonizing睡眠和QTimer
- 7. 的max_execution_time和睡眠()
- 8. Pthread ID和睡眠
- 9. SSH流和睡眠
- 10. C#线程的状态和“睡眠”
- 11. C++ msgsnd和msgrvc陷入睡眠
- 12. 游戏时钟和睡眠(C++)
- 13. C++等待和睡眠问题
- 14. 在Solaris上睡觉时遇到SIGALRM 9
- 15. 睡眠 - 直到在c#
- 16. C++睡眠线程冲突
- 17. c#睡眠线程问题
- 18. C#:非阻塞睡眠
- 19. C++:如何睡眠纳秒?
- 20. “互动”在C++中睡眠
- 21. 睡眠()或睡眠()的准确程度
- 22. 如何禁用睡眠/睡眠功能?
- 23. PHP睡眠VS庆典睡眠
- 24. 睡眠模式和深度睡眠模式有什么区别?
- 25. PHP,MySQL和“睡眠”连接
- 26. 睡眠和唤醒python
- 27. WSH Jscript AppActivate()和睡眠()
- 28. 夏令时和睡眠
- 29. 主题 - 睡眠和中断
- 30. 轨道状态和睡眠?
我能想到的唯一选择是丑陋的hackery,用poll()或select()设置一个空的文件描述符来取代sleep()。 –