Как создать поток таймера в c - PullRequest
0 голосов
/ 15 января 2011

Как создать функцию потока таймера: timerThreadFunction (pthread_t thread_id) и безопасно проверить результат таймера из другой функции:

    // Begin of atomic part -- cause i'm in multithreaded environement
    if (timerThreadFunction(thread_id) has not expired) {
        // SOME WORK HERE
    }

    else {

    // Timer expired
    // some work here

    }

// End of atomic part

СПАСИБО.

Ответы [ 2 ]

2 голосов
/ 15 января 2011

Если вы спрашиваете о части взаимного исключения, вы можете использовать мьютекс для достижения этой цели.Используйте pthread_mutex_init для инициализации мьютекса и pthread_mutex_destroy для его очистки.Затем используйте pthread_mutex_lock и pthread_mutex_unlock , чтобы получить и освободить мьютекс.

Редактировать Основываясь на кратком (чрезвычайно кратком) просмотре вашего другого поста, который вы упомянули в комментариях, я понимаю, что вы ищете альтернативу sleep ().Можно использовать select () .Сделайте что-то вроде этого:

struct timeval sleeptime;
// initialize sleeptime with the desired length such as
memset( &sleeptime, 0, sizeof( sleeptime ));
sleeptime.tv_sec = 5;

select( 0, NULL, NULL, NULL, &sleeptime );

Это не будет блокировать другие потоки.Однако вы должны заметить, что select вернется (если я правильно помню), если процесс получит какие-либо сигналы, даже если время еще не истекло.

0 голосов
/ 15 января 2011

Есть множество вариантов

  1. Не используйте отдельный поток, просто опросите внутренний таймер.
  2. позвольте вашему потоку таймера завершиться и присоедините ваш основной поток к потоку таймера.
  3. Использовать семафор
  4. Использовать защищенный мьютекс флаг.

Этого должно быть достаточно, чтобы начать.

...