我目前正在設計一個小型機器人,通過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()。 –