Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: Akon от Сентября 01, 2011, 15:16



Название: QMetaObject::invokeMethod() в главный поток до QCoreApplication::exec()
Отправлено: Akon от Сентября 01, 2011, 15:16
По ходу сабж не работает?


Название: Re: QMetaObject::invokeMethod() в главный поток до QCoreApplication::exec()
Отправлено: LisandreL от Сентября 01, 2011, 15:30
DirectConnection должен работать и так (хотя в так легче вызвать сам метод).
Для QueuedConnection нужен обработчик событий (в принимающем потоке).  Скорее всего не обязательно нужен QCoreApplication::exec(), сойдёт и периодически вызываемый QCoreApplication::processEvents(), но честно говоря я не проверял.


Название: Re: QMetaObject::invokeMethod() в главный поток до QCoreApplication::exec()
Отправлено: Akon от Сентября 01, 2011, 15:48
Сорри, забыл: естественно с Qt::QueuedConnection.

Тут проблема в том, что цикл сообщений еще не создан (QCoreApplication::exec() еще не вызван). Поверхносто пройдя по исходникам, не видел, что вызов сбрасывается.


Название: Re: QMetaObject::invokeMethod() в главный поток до QCoreApplication::exec()
Отправлено: LisandreL от Сентября 01, 2011, 16:11
QCoreApplication::processEvents() работает и до вызова QCoreApplication::exec() (проверял с анимированным QSplashScreen).
А вы уверены, что на момент вызова целевой объект уже существует? А то может вы к 0 обратиться пытаетесь?


Название: Re: QMetaObject::invokeMethod() в главный поток до QCoreApplication::exec()
Отправлено: Akon от Сентября 01, 2011, 16:43
Вопрос снят. Все работает, т.е. QMetaObject::invokeMethod() (равно как и QCoreApplication::postEvent) в главный поток до QCoreApplication::exec(). Было бы неудобно, если бы не работало  :)

Ошибочный вывод я сделал на том, что не срабатывала точка останова gdb/mingw/QtCreator. Такое у меня бывало и лечилось перезапуском QtCreator. Это косяк инструментария. Хоть я и пользуюсь отладчиком в такой конфигурации только по мелочам, но получилось напоролся  :(

Спасибо за обсуждение.