Ключевые слова:threads, gcc, signal, (найти похожие документы)
Date: Mon, 05 Aug 2002 15:05:31 +0600
From: Valentin Nechayev <netch@segfault.kiev.ua>
Newsgroups: fido7.ru.linux
Subject: Сигнализация изменения переменной в threads
>Переменная, хранящая состояние event'а; condition variable,
>по которой сигнализируется ее изменение; мьютекс для сериализации доступа
>к перечисленному.
man pthread_cond_wait и pthread_cond_timedwait прочел? Hет?
Ждешь примерно так:
pthread_mutex_lock( &ep->ev_mutex );
for(;;) {
if( ep->ev_flag ) break;
pthread_cond_wait( &ep->ev_cond, &ep->ev_mutex );
}
pthread_mutex_unlock( &ep->ev_mutex );
Оно будет ждать пока не дадут "сигнал" по condition variable и пока ты
не найдешь после сигнала ep->ev_flag равным не 0.
Если хочешь безусловный вывал по таймауту - или в цикле проверяешь текущее
время (и тогда обязательно pthread_cond_timedwait), или голый
pthread_cond_timedwait без цикла.
Сигнал дается так:
pthread_mutex_lock( &ep->ev_mutex );
pthread_cond_signal( &ep->ev_cond );
pthread_mutex_unlock( &ep->ev_mutex );
Все это если ep указывает на структуру вида
{
int ev_flag;
pthread_cond_t ev_cond;
pthread_mutex_t ev_mutex;
}
SK> А что-нибудь вроде
SK> WaitForSignal( hSignal, nMilliSecTimeout);
SK> нету?
pthread_cond_timedwait. Опишешь сколько ему можно спать.
/netch