2010-10-14 14 views
5

La API de Win32 tiene una función PostMessage que publica un mensaje al final de la cola de mensajes de la GUI que se procesará más tarde desde el hilo de la GUI, en oposición al SendMessage que envía y procesa el mensaje sincrónico con el hilo de llamadaBuscando la funcionalidad PostMessage en Qt

¿Existe una solución Qt para la funcionalidad PostMessage? Un compañero de trabajo sugirió que la implementación del servidor/socket de Qt podría proporcionarlo; ¿Es ese un enfoque razonable?

Respuesta

8
+0

Estoy aceptando esta respuesta porque emula de cerca 'PostMessage', que es lo que pregunté. Sin embargo, decidí que voy a usar la solución de Jkerian (QTimer :: singleShot) porque encaja mejor con las señales/ranuras de Qt. ¡Gracias a ambos! –

7

Mire QTimer::singleShot. En su caso, querrá usarlo con un valor msec de 0, que debería proporcionar la misma funcionalidad. (Esto se usa regularmente para implementar la inicialización diferida, hasta que se ejecute el bucle de evento GUI)

6

similares a la solución QTimer, pero con la ventaja de que se puede pasar argumentos, es la forma 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)); 

El QueuedConnection lo pone en cola en el bucle de eventos, DirectConnection lo ejecutaría inmediatamente.

4

Todas las respuestas hasta ahora son buenas, solo quiero agregar que también se puede usar connect() con Qt::QueuedConnection para el tipo de conexión.

Cuestiones relacionadas