Russian Qt Forum

Qt => Общие вопросы => Тема начата: Admin от Февраль 19, 2004, 12:29



Название: Аналог PostMessage в винде
Отправлено: Admin от Февраль 19, 2004, 12:29
как в qt вызвать функцию не дожидаясь окончания ее дейиствия продолжить далее

есть только идея с QThread


Название: Re: Аналог PostMessage в винде
Отправлено: alex0303 от Апрель 16, 2006, 09:42
Цитата: "Admin"
как в qt вызвать функцию не дожидаясь окончания ее дейиствия продолжить далее


Както не очень понятно что же Вы всётаки хотите.


Если аналог PostMessage() для одного треда то вполне подойдёт:
Код:

void QApplication::postEvent ( QObject * receiver, QEvent * event )
или
void QTimer::singleShot ( int msec, QObject * receiver, const char * member )
с msec = 0;


Если же многопоточная обработка то QThread и межпоточное взаимодействие.


Название: Аналог PostMessage в винде
Отправлено: -=QT=- от Апрель 03, 2007, 08:23
qApp->processEvents();

добавлено спустя 59 секунд:

 Хотя возможно я ошибаюсь.


Название: Аналог PostMessage в винде
Отправлено: goer от Апрель 03, 2007, 10:21
Можно поместить объект, функцию которого ты хочешь вызвать, в другой поток.
Чтоб вызвать функцию - постишь свое событие для этого объекта, а в обработчике события запускаешь свою функцию.
Таким образом она выполнится в другом потоке.


Название: Аналог PostMessage в винде
Отправлено: Gryz от Апрель 03, 2007, 10:40
надо использовать  QMetaObject::invokeMethod с типом соединения Qt::QueuedConnection.

Работает только для слота. При соединении типа Qt::QueuedConnection не может быть возвращаемых значений.

Метод будет вызван после возврата в главный цикл обработки сообщений.

добавлено спустя 2 минуты:

 Вышенаписанное работает как в однопоточном, так и в многопоточном приложении. Соответсвенно, если обращаемся к объекту из другого потока, то его метод будет вызван после возврата в цикл обработки сообщений того потока.