2014-12-11 3 views
0

У меня есть функция, запускаемая при запуске QTconcurrent. Внутри этой функции я использую QThread (чтобы получить поток, созданный запуском QTConcurrent), статический метод, чтобы скрыть его некоторое время, но я больше не хочу использовать время для его активации, я бы хотел использовать WaitCondition для пробуждения поток в другой точке исполнения, но я много искал и не нашел такого случая. Я вижу только методы WaitConditions внутри методов run(). Есть ли способ использовать QWaitCondition в потоке, запущенном QtConcurrent?Использовать QWaitCondition в потоке, запущенном QtConcurrent

ответ

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(); 
} 
+0

Thnaks! он работал отлично. – axius

 Смежные вопросы

  • Нет связанных вопросов^_^