2010-10-14 12 views
5

Funkcja Win32 API ma funkcję PostMessage, która powoduje wysłanie komunikatu na końcu kolejki komunikatów GUI, która ma zostać przetworzona później z wątku GUI, w przeciwieństwie do SendMessage, która wysyła i przetwarza komunikat synchronicznie z dzwoniący wątek.Poszukiwanie funkcji PostMessage w Qt

Czy istnieje rozwiązanie Qt dla funkcji PostMessage? Współpracownik zasugerował, że implementacja serwera/gniazda Qt może go zapewnić; czy to rozsądne podejście?

Odpowiedz

8
+0

Przyjmuję tę odpowiedź, ponieważ ściśle naśladuje "PostMessage", o to właśnie prosiłem. Jednak zdecydowałem, że zamierzam użyć rozwiązania jkerian (QTimer :: singleShot), ponieważ lepiej pasuje do sygnałów/gniazd Qt. Dzięki wam oboje! –

7

Spójrz na QTimer::singleShot. W twoim przypadku będziesz chciał użyć go z wartością msec z 0, która powinna zapewniać tę samą funkcjonalność. (Jest to regularnie używane do implementacji opóźnionej intializacji, dopóki pętla zdarzeń GUI nie zostanie uruchomiona)

6

podobne do rozwiązania QTimer, ale z korzyścią, które można przekazywać argumenty, to droga QMetaObject :: invokeMethod:

QString SomeClass::compute(const QString&, int, double); 
... 
QMetaObject::invokeMethod(obj, "compute", Qt::QueuedConnection, 
         Q_RETURN_ARG(QString, retVal), 
         Q_ARG(QString, "sqrt"), 
         Q_ARG(int, 42), 
         Q_ARG(double, 9.7)); 

QueuedConnection kolejek go w pętli zdarzeń, DirectConnection by go wykonać natychmiast.

4

Wszystkie dotychczasowe odpowiedzi są dobre, po prostu chcę dodać, że można również użyć connect() z Qt::QueuedConnection dla typu połączenia.

Powiązane problemy