首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在通过setitimer使用计时器的同时使用睡眠()

在通过setitimer使用计时器的同时使用睡眠()
EN

Stack Overflow用户
提问于 2010-09-05 12:35:41
回答 3查看 1.9K关注 0票数 3

我通过sys/time.h中的setitimer函数在我的C++代码中使用了一个计时器。这会将SIGALRM信号映射到我的计时器处理程序方法。在这之后我就不能使用睡眠功能了。我猜这是因为睡眠也使用了SIGALRM信号。对于这个问题,你能建议一些解决方法吗?

感谢您的回复。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-05 12:48:21

您可以尝试将select()用作计时器。我不知道它是否使用了SIGALRM,但它应该很容易测试。类似于:

代码语言:javascript
复制
   timeval t = {1, 0};

   select(0, NULL, NULL, NULL, &t);
票数 3
EN

Stack Overflow用户

发布于 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标准化的,它提供更高的定时分辨率,并且它允许更容易地继续被信号中断的睡眠。

票数 8
EN

Stack Overflow用户

发布于 2010-09-05 12:43:35

我会使用一个为这些操作系统服务提供抽象的库。我使用ACE库来实现定时器和休眠(ACE_OS::sleepACE_Reactor::schedule_timeout),它们在一起工作没有任何问题。据我所知,ACE使用select作为计时器。我猜boost::thread::sleepboost::asio::deadline_timer也会成功完成这项任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3645026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档