我通过sys/time.h中的setitimer函数在我的C++代码中使用了一个计时器。这会将SIGALRM信号映射到我的计时器处理程序方法。在这之后我就不能使用睡眠功能了。我猜这是因为睡眠也使用了SIGALRM信号。对于这个问题,你能建议一些解决方法吗?
感谢您的回复。
发布于 2010-09-05 12:48:21
您可以尝试将select()用作计时器。我不知道它是否使用了SIGALRM,但它应该很容易测试。类似于:
timeval t = {1, 0};
select(0, NULL, NULL, NULL, &t);发布于 2010-09-05 12:39:44
从alarm(2) man page
sleep()可以使用SIGALRM实现;混合调用alarm()和sleep()不是一个好主意。
有些实现不使用SIGALRM,找一台这样的机器就可以了。否则,您可以尝试nanosleep();它是安全实现的。从nanosleep(2) man page
与
sleep(3)和usleep(3)相比,nanosleep()具有不影响任何信号的优点,它是由POSIX标准化的,它提供更高的定时分辨率,并且它允许更容易地继续被信号中断的睡眠。
发布于 2010-09-05 12:43:35
我会使用一个为这些操作系统服务提供抽象的库。我使用ACE库来实现定时器和休眠(ACE_OS::sleep,ACE_Reactor::schedule_timeout),它们在一起工作没有任何问题。据我所知,ACE使用select作为计时器。我猜boost::thread::sleep和boost::asio::deadline_timer也会成功完成这项任务。
https://stackoverflow.com/questions/3645026
复制相似问题