Всем привет!
Есть таймер
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;
}