И это всё МОЁ

Имею проект: https://github.com/xintrea/mytetra_dev
Коммит: f3c08a83 (ветка experimental), это просто последний коммит на текущий момент.

У меня есть класс EditorShowTextDispatcher (далее буду называть его просто Dispatcher), который переносится в отдельный поток относительно кода основного приложения. Перенос делается согласно памятке:

Последовательность переноса объекта в отдельный поток для Qt5

Код класса Dispatcher расположен по пути:

/app/src/libraries/wyedit/EditorShowTextDispatcher.cpp

Перенос в отдельный поток происходит в конструкторе данного класса. Перенос осуществляется методом moveToThread(), он вызывается, естественно, ДО настроек коннектов данного класса.

Настройка коннекта для вызова слота класса Dispatcher происходит в классе PeriodicCheckBase:
/app/src/libraries/PeriodicCheckBase.cpp

Настройка коннекта происходит в методе init(). Он вызывается после отработки конструктора класса Dispatcher, то есть после переноса класса Dispatcher в отдельный поток. В коннекте соединяются методы:
c=connect(this, 
&PeriodicCheckBase::doUpdateDetachedWindows,
EditorShowTextDispatcher::instance(),
&EditorShowTextDispatcher::closeWindowForNonExistentRecords,
Qt::QueuedConnection);

Испускание сигнала doUpdateDetachedWindows() происходит в методе timerEvent() данного класса PeriodicCheckBase.

Создание коннекта происходит успешно, я проверяю результат работы connect(), там все в порядке. В консоль никаких ворнингов в рантайме не сыплется.

Проблема в том, что слот closeWindowForNonExistentRecords() не вызывается.

Если же поменять тип соединения на Qt:<img src=" src="static.diary.ru/picture/1131.gif">irectConnection, то слот отрабатывает нормально.

Вопрос: где еще что надо докручивать, чтобы слот можено было вызвать в отдельном потоке?








 , , , ,