2013-03-10 11 views

Odpowiedz

6

A co:

a.wait(); 
b.wait(); 

Albo, czy raczej początek pętli zdarzeń (jak zwykle dla aplikacji Qt), który rzucić gdy oba swoje Koniec wątków (QThread wysyła sygnały zakończone() i zakończone()).

+1

+1, Byłem w trakcie pisania tego, kiedy mnie biłeś. [Tutaj jest dokumentacja QThread :: wait] (http://qt-project.org/doc/qt-4.8/qthread.html#wait) – tmpearce

+0

@tmpearce Przepraszam za to :) I, prawo, Qt docs to najlepsze miejsce do patrz najpierw. – Archie

2

Normalnie, z Qt będziesz mieć klasę opartą na QApplication z pętlą zdarzeń z sygnałami i slotami, która nie wyjdzie z głównej funkcji dopóki nie będziesz chciał. W takim przypadku możesz po prostu podłączyć sygnał QThread :: finish() do gniazda, które sprawdza, czy wszystkie wątki zostały wykonane.

Bez pętli zdarzeń i sygnałów/szczelin wątki Qt nie mają metody join(), znajdującej się w innej implementacji wątków, ale QThread :: wait() jest nieco podobny.

bool QThread::wait(unsigned long time = ULONG_MAX) 

blokuje nić dopóki jeden z tych warunków zostanie spełniony:

  • nić z tym związane QThread obiekt został zakończony wykonania (to jest po powrocie z QThread::run()). Ta funkcja zwróci true, jeśli wątek został zakończony. Zwraca także true, jeśli wątek nie został jeszcze uruchomiony.
  • time upłynął milisekund. Jeśli czas wynosi ULONG_MAX (wartość domyślna), to oczekiwanie nigdy nie przekroczy limitu czasu (wątek musi zwrócić z QThread::run()). Ta funkcja zwróci false, jeśli upłynął limit czasu oczekiwania.
Powiązane problemy