我正在使用GCC编译器和C ++,我想制作一个在倒计时为0时触发中断的计时器。
任何想法?提前谢谢。
修改
感谢Adam,我知道该怎么做。
现在。多个定时器并行运行怎么办?
实际上,这些计时器是非常基本的。在NCURSES,我有一系列的东西。当我按下一个键时,其中一个会改变颜色5秒钟。如果我按另一个键,列表中的另一个东西也会这样做。这就像根据用户输入强调字符串一样。有更简单的方法吗?
答案 0 :(得分:3)
实现中断计时器的一种简单,可移植的方法是使用Boost.ASIO。具体来说,boost::asio::deadline_timer class允许您指定一个持续时间和一个中断处理程序,它将在计时器用完时异步执行。
请参阅here以获取快速教程和演示。
答案 1 :(得分:2)
一种方法是在计时器用完时使用alarm(2)
系统调用向您的进程发送SIGALRM
:
void sigalrm_handler(int sig)
{
// This gets called when the timer runs out. Try not to do too much here;
// the recommended practice is to set a flag (of type sig_atomic_t), and have
// code elsewhere check that flag (e.g. in the main loop of your program)
}
...
signal(SIGALRM, &sigalrm_handler); // set a signal handler
alarm(10); // set an alarm for 10 seconds from now
请仔细注意alarm
手册页中的注意事项:
闹钟()和 setitimer()共享相同的计时器;对一个人的呼叫会干扰另一个人的使用。
sleep()可以使用 SIGALRM 实现;将呼叫混合到警报()和睡眠()是一个坏主意。
调度延迟可以像往常一样导致进程的执行延迟任意时间。
答案 2 :(得分:-1)