Название: Как заблокировать сигнал сработки таймера? Отправлено: 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 не угодил ?
|