Имеют две глобальные переменные, одну для блокировки мьютекса и другую для сигнальной переменной, подобной этой.
pthread_cond_t signal = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t cond_mutex = PTHREAD_COND_INITIALIZER;
В вашем родительском потоке, когда вы печатаете сигнал blabla, дочерний поток:
pthread_mutex_lock(&cond_mutex);
pthread_cond_signal(&signal);
pthread_mutex_unlock(&cond_mutex);
В вашем дочернем потоке дождитесь сигнала:
struct timespec time_to_wait = {0, 0};
time_to_wait.tv_sec = time(NULL) + 10;//10 secs
pthread_mutex_lock(&cond_mutex);
status = pthread_cond_timedwait(&signal,&cond_mutex, &time_to_wait);
pthread_mutex_unlock(&cond_mutex);
Вы можете расширить этот код, чтобы обрабатывать несколько раз, ожидая возникновения условия каждые 't' секунд в цикле, или просто подождать один раз 'T 'секунд и выйти.Обратитесь к этому doc для получения возвращаемых значений.