通过setitimer使用计时器时使用Sleep()

Sky*_*eSM 3 c++ unix sleep timer

我通过sys/time.h中的setitimer函数在我的C++代码中使用了一个计时器.这将SIGALRM信号映射到我的计时器处理程序方法.在此之后我无法使用睡眠功能.我假设这是因为睡眠也使用SIGALRM信号.你能为这个问题建议任何解决方法吗?

感谢回复.

Car*_*rum 8

alarm(2) 手册页:

sleep()可以使用SIGALRM; 混合呼叫alarm()并且sleep()是一个坏主意.

有些实现不使用SIGALRM,找到这样的机器并且你已经设置好了.否则,你可以尝试nanosleep(); 它安全地实施了.从nanosleep(2) 手册页:

相比sleep(3)usleep(3),nanosleep()具有不影响任何信号的优点,它是由POSIX标准,它提供了更高的时间分辨率,并允许继续已经由一个信号更容易地中断睡眠.