Russian Qt Forum
Октябрь 18, 2018, 22:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как заблокировать сигнал сработки таймера?  (Прочитано 646 раз)
Demon051
Новичок

Offline Offline

Сообщений: 8


Просмотр профиля
« : Май 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;
}
Записан
qate
Гипер активный житель
*****
Offline Offline

Сообщений: 897


Просмотр профиля
« Ответ #1 : Май 10, 2018, 20:23 »

чем qtimer не угодил ?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.141 секунд. Запросов: 22.