Russian Qt Forum

Компиляторы и платформы => Linux => Тема начата: Demon051 от Май 10, 2018, 14:35



Название: Как заблокировать сигнал сработки таймера?
Отправлено: Demon051 от Май 10, 2018, 14:35
Всем привет!

Есть таймер

Код:
const int signoBM = SIGRTMIN + 2;

bool BaseModuleManager::createTimerBM()
{
    siginfo_t info;
    struct sigevent sigev;
    struct sigaction sa;
    struct itimerspec ival;


    /* Регистрируем обработчик для SIGRTMIN + 2*/

    sa.sa_flags = SA_SIGINFO;
    sigemptyset(&sa.sa_mask);
    sa.sa_sigaction = timerHandlerBM;
    if (sigaction(signoBM, &sa, NULL) == -1)
    {
      return false;
    }

    sigemptyset(&timerBMSigMask);
    sigaddset(&timerBMSigMask, signoBM);

    sigev.sigev_notify = SIGEV_SIGNAL;
    sigev.sigev_signo = signoBM;
    sigev.sigev_value.sival_int = 2;
    sigev.sigev_value.sival_ptr = this;

    sigprocmask(SIG_BLOCK, &timerBMSigMask, NULL);


    if (timer_create(CLOCK_MONOTONIC, &sigev, &_tidBM) == -1)
    {
        return false;
    }

    struct itimerspec ival;
    ival.it_value.tv_sec = 1;
    ival.it_value.tv_nsec = 0;
    ival.it_interval.tv_sec = 0;       
    ival.it_interval.tv_nsec = 500000000;

    if (timer_settime(_tidBM, 0, &ival, NULL) == -1)
    {
       return false;
    }

    return true;
}


bool BaseModuleManager::unblockTimerBM()
{
    if (sigprocmask(SIG_UNBLOCK, &timerBMSigMask, NULL) == -1)
            return false;
    return true;
}

Собственно, предполагается, что таймер не должен сразу стартовать, при создании. А должен при вызове unblockTimerBM()

однако, запускается сразу.
Вопрос: что делаю не так?
И можно ли таким образом заблокировать сигнал таймера?
Как правильно это сделать?

Задача в том, чтобы по необходимости запускать и останавливать таймер.
Для остановки думалось использовать

Код:
bool BaseModuleManager::blockTimerBM()
{
    if (sigprocmask(SIG_BLOCK, &timerBMSigMask, NULL) == -1)
           return false;
    return true;
}


Название: Re: Как заблокировать сигнал сработки таймера?
Отправлено: qate от Май 10, 2018, 20:23
чем qtimer не угодил ?