Я разрабатываю многопоточное приложение, которое использует темы POSIX. Я использую потоки для выполнения периодического задания и для этой цели я использую usleep (3), чтобы приостановить выполнение потока, Мой вопрос: как я могу отменить таймер usleep() из основного потока, я пробовал pthread_kill(thread, SIGALRM)
, но он имеет глобальный эффект, который приводит к прекращению основного приложения (по умолчанию). Вот мой псевдокод:
void threaded_task(void *ptr) {
initialize();
while(running) {
do_the_work();
usleep(some_interval);
}
clean_up();
release_resources();
}
И вот псевдофункция, которая используется для остановки (и изящное завершение), заданная нить из основного файла :
void stop_thread(pthread_t thread) {
set_running_state(thread, 0); // Actually I use mutex staff
// TODO: Cancel sleep timer so that I will not wait for nothing.
// Wait for task to finish possibly running work and clean up
pthread_join(thread, NULL);
}
Каков удобный способ достижения моей цели? Должен ли я использовать условные переменные или могу ли я сделать это с помощью вариантов sleep()?