Ищем функциональность PostMessage в Qt - PullRequest
5 голосов
/ 15 октября 2010

Win32 API имеет функцию PostMessage, которая отправляет сообщение в конец очереди сообщений GUI для последующей обработки из потока GUI, в отличие от SendMessage, который отправляет и обрабатывает сообщение синхронно с вызывающим потоком .

Есть ли решение Qt для PostMessage функциональности? Коллега предположил, что реализация Qt для сервера / сокета может обеспечить это; это разумный подход?

Ответы [ 4 ]

8 голосов
/ 15 октября 2010
7 голосов
/ 15 октября 2010

Посмотрите на QTimer :: singleShot . В вашем случае вы захотите использовать его со значением msec, равным 0, которое должно обеспечивать такую ​​же функциональность. (Это регулярно используется для реализации отложенной инициализации, пока не будет запущен цикл событий GUI)

6 голосов
/ 15 октября 2010

Аналогично решению QTimer, но с тем преимуществом, что вы можете передавать аргументы, есть способ 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 ставит его в очередь в цикле событий, DirectConnection сразу же выполнит его.

4 голосов
/ 17 октября 2010

Все ответы пока хорошие, я просто хочу добавить, что вы также можете использовать connect() с Qt::QueuedConnection для типа подключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...