crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Как заблокировать сигнал сработки таймера?
demon051
  опции профиля:
сообщение 10.5.2018, 14:23
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 27
Регистрация: 12.8.2014
Пользователь №: 4209

Спасибо сказали: 4 раз(а)




Репутация:   0  


Всем привет!

Есть таймер

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;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 21.11.2024, 23:54