Jaki jest właściwy sposób dla głównego wątku GUI do aktualizacji QProgressDialog podczas oczekiwania na QFuture. W szczególności, co się dzieje w tej pętli:Aktualizacja QProgressDialog za pomocą QFuture
QProgressDialog pd(...);
QFuture f = ...;
while (!f.isFinished()) {
pd.setValue(f.progressValue());
// what goes here?
}
Teraz mam sleep(), tak jak rozmowy tam, ale to nie jest optymalny (i oczywiście wprowadza pewne opóźnienie GUI).
Jeśli nic nie położę, główny wątek będzie pętlą pd.setValue(), marnując cykle procesora.
Miałem nadzieję na umieszczenie czegoś takiego jak QCoreApplication :: processEvents (flags, maxtime), ale to natychmiast zwraca, jeśli kolejka zdarzeń jest pusta. Chciałbym wersję, która czeka aż do maxtime lub cokolwiek, nawet jeśli kolejka jest pusta. W ten sposób otrzymuję opóźnienie, a główny wątek jest zawsze gotowy do reagowania na zdarzenia GUI.
Świetna odpowiedź TimW. FYI brakuje "&" przed 'watcher' w' connect (watcher, ...); '? – sstock
thx, poprawiono kod – TimW