PIP 5.5.3
Platform-Independent Primitives
Открытые члены | Полный список членов класса
Класс PIThreadNotifier

Класс для простого уведомления и ожидания в различных потоках Подробнее...

#include <pithreadnotifier.h>

Открытые члены

void wait ()
 Начать ожидание, продолжает когда другой поток вызовет notify() Подробнее...
 
bool waitFor (PISystemTime timeout)
 Начать ожидание не дольше чем "timeout", возвращает true когда другой поток вызовал notify(), false если таймаут истек
 
void notify ()
 Уведомить один из ожидающих потоков, которые висят на методе wait() Подробнее...
 

Подробное описание

Класс для простого уведомления и ожидания в различных потоках

Краткий обзор

Этот класс используется как событийный механизм между потоками. Один поток ждёт некоторого события и другой его отправляет, разблокируя первый. Это полезно для синхронизации действий в нескольких потоках.

Использование

class Worker: public PIThread {
PIOBJECT_SUBCLASS(Worker, PIThread)
public:
Worker(const PIString & n) {
setName(n);
}
void run() override {
piCoutObj << (int)time.elapsed_m() << "wait ...";
notifier.wait();
piCoutObj << (int)time.elapsed_m() << "done";
};
};
int main(int argc, char * argv[]) {
// create 2 threads
for (auto n: {"first ", "second"})
workers << new Worker(n);
// start them
for (auto * w: workers)
w->startOnce();
piMSleep(500);
notifier.notify(); // notify one of them after 500 ms
piMSleep(500);
notifier.notify(); // notify one of them after 1000 ms
for (auto * w: workers)
w->waitForFinish();
}
// [Worker "first "] 0 wait ...
// [Worker "second"] 0 wait ...
// [Worker "second"] 500 done
// [Worker "first "] 1000 done
Класс строки.
Definition: pistring.h:42
Класс потока
Definition: pithread.h:72
Класс для простого уведомления и ожидания в различных потоках
Definition: pithreadnotifier.h:32
void wait()
Начать ожидание, продолжает когда другой поток вызовет notify()
Definition: pithreadnotifier.cpp:109
void notify()
Уведомить один из ожидающих потоков, которые висят на методе wait()
Definition: pithreadnotifier.cpp:139
Измерение времени.
Definition: pisystemtime.h:457
double elapsed_m() const
Возвращает в милисекундах время, прошедшее с последнего вызова reset(), либо создания измерителя.
Definition: pisystemtime.cpp:297
Последовательный контейнер с линейной памятью - динамический массив любого типа.
Definition: pivector.h:118
void piMSleep(double msecs)
Точно ожидает "msecs" миллисекунд
Definition: pitime.h:42

Методы

◆ wait()

void PIThreadNotifier::wait ( )

Начать ожидание, продолжает когда другой поток вызовет notify()

Если ранее был вызван notify(), то возвращает управление немедленно.
Если ранее был вызван notify() "n" раз, то возвращает управление немедленно "n" раз, но только если ожидать одним потоком.
Если ожидают несколько потоков, и notify() был вызван "n" раз, то все потоки суммарно вернут управление "n" раз в неопределенной последовательности.

◆ notify()

void PIThreadNotifier::notify ( )

Уведомить один из ожидающих потоков, которые висят на методе wait()

Если ожидают несколько потоков, то уведомляет один случайный.
Если вызвать "n" раз, то все ожидающие потоки уведомятся суммарно "n" раз.