У меня есть функция, запускаемая при запуске QTconcurrent. Внутри этой функции я использую QThread (чтобы получить поток, созданный запуском QTConcurrent), статический метод, чтобы скрыть его некоторое время, но я больше не хочу использовать время для его активации, я бы хотел использовать WaitCondition для пробуждения поток в другой точке исполнения, но я много искал и не нашел такого случая. Я вижу только методы WaitConditions внутри методов run(). Есть ли способ использовать QWaitCondition в потоке, запущенном QtConcurrent?Использовать QWaitCondition в потоке, запущенном QtConcurrent
0
A
ответ
1
Вы также должны использовать мьютекс:
void work(QMutex* mutex, QWaitCondtion* cond, volatile bool* wake){
//do work
{
QMutexLocker locker(mutex);
while(!*wake){
cond->wait(mutex);
}
}
//do more work
}
Петля необходимо, чтобы избежать ложных пробуждений и пусть нить провалиться, если wake
уже установлен в true
. Блокировка по всему циклу необходима, чтобы избежать различных условий гонки.
Вы просыпаетесь нить:
{
QMutexLocker locker(mutex);
*wake = true;
cond->wakeOne();
}
Thnaks! он работал отлично. – axius