我正试图在C++方法中实现一个超时,它可以进行一些轮询。该方法目前看起来像这样(无超时):自制超时的最佳做法
do {
do_something();
usleep(50);
} while(!is_finished());
该溶液应具有以下性质:
- 应生存的系统时间变化
- 超时以毫秒(一些抖动是可以接受的)
- POSIX兼容
- 不应该使用的信号(是一个库的一部分,避免副作用)
- 可能使用升压
我目前考虑使用clock()
,做这样的事情:
start = clock();
do {
do_something();
usleep(50); // TODO: do fancy stuff to avoid waiting after the timeout is reached
if(clock() - start > timeout * CLOCKS_PER_SEC/1000) break;
} while(!is_finished());
这是一个很好的解决方案吗?我试图找到最好的解决方案,因为这种任务似乎经常出现。
什么被认为是这种问题的最佳做法?
在此先感谢!
当您说“POSIX compatible”时,您的意思是POSIX 1003.1b-1993和POSIX 1003.1i-1995是否带有Realtime Extensions? – WhozCraig
我的意思是它应该在POSIX兼容系统上运行。 – thammi