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.
+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
@tmpearce Przepraszam za to :) I, prawo, Qt docs to najlepsze miejsce do patrz najpierw. – Archie