1

我有一些问题,所以我问。我在linux中制作了关于计时器的项目,但它出错了。我想知道有关删除计时器的信息。

我使用了 timer_settime 和 clear timer 的方法。但它没有删除计时器。

如何在linux中删除计时器?timer_delete 不起作用。

等)它是创建代码。

    sa.sa_flags = SA_SIGINFO;
    sa.sa_sigaction = timer_callback;
    sigaddset(&sa.sa_mask, sig_no);
    if (sigaction(sig_no, &sa, NULL) == -1) {
        L_ERROR("error in sigaction.");
        return;
    }

    sev.sigev_notify = SIGEV_SIGNAL;
    sev.sigev_signo = sig_no;
    if (timer_create(CLOCK_REALTIME, &sev, &timerid) == -1) {
        L_ERROR("error in timer_create.");
        return;
    }

    // Start the timer
    its.it_value.tv_sec = second;
    L_ERROR("second = %d\n", second);
    its.it_value.tv_nsec = 0;
    its.it_interval.tv_sec = its.it_value.tv_sec;
    its.it_interval.tv_nsec = its.it_value.tv_nsec;

    if (timer_settime(timerid, 0, &its, NULL) == -1) {
        L_ERROR("error in timer_settime.");
        return;
    }

这是删除代码。

sigemptyset(&sa.sa_mask);
sa.sa_handler = SIG_IGN;
if(sigaction(sig_no, &sa, NULL) == -1)
{
          L_ERROR("[TimerDebugging] Fail to sigaction(), SIG_IGN, sig_no=%d", sig_no);
          return;
}
L_ERROR("[TimerDebugging] sigaction(), SIG_IGN, sig_no=%d", sig_no);

its.it_value.tv_sec = 0;
its.it_value.tv_nsec = 0L;
its.it_interval.tv_sec = 0;
its.it_interval.tv_nsec = 0;
if(timer_settime(timer_id, 0, &its, NULL) == -1)
{
          L_ERROR("[TimerDebugging] timer_settime() -for disarm timer- sig_no=%d error", sig_no);
          return;
}

result = timer_delete(timer_id);
L_ERROR("[TimerDebugging] timer_delete() result=%d", result);
if( result < 0 )
{
          L_ERROR("timer_delete() error, errno=%d", result);
          return;
}

我们使用了多个定时器信号。

感谢任何回复。

4

0 回答 0