Подтвердить что ты не робот

Испускать Qt-сигнал от non Qt Thread или ouside Qt основного цикла событий с 4.5

Я вызываю emit signal1() из потока без Qt. С помощью потока non Qt я имею в виду не из цикла событий GUI, а не из любого метода QThread run() или любого собственного цикла событий QThread.

Это просто pthread (pthread_create()), который вызывает метод QObject, который испускает сигналы.

Пример:

MyQbject: public QObject
{
...
void emitBunchOfSignals()
{
 emit signal1();
 emit signal2();
 ...
}
...
}

метод "run" моего pthread, который имеет указатель на экземпляр MyObject (экземпляр, который был создан в главном контексте потока QI GUI NOT pthread) вызывает методы emitBunchOfSignals().

До Qt 4.5 это было противно. Теперь Qt 4.5 справляется с этим? Вызывает ли он qApp->PostEvent() или что-то такое, что сигнал испускается в Qt-графическом потоке (и, следовательно, слот)?

спасибо

4b9b3361

Ответ 1

Что нужно сделать, так это то, что вы используете связанное по очереди соединение с потоками, так как Qt не может автоматически определить, какой объект принадлежит нитей ( "сродство потока" - это термин, используемый в документации). Вы делаете это при подключении:

connect(src, SIGNAL(signal-signature), dest, SLOT(slot-signature), Qt::QueuedConnection);

Это приведет к тому, что сигнал будет помещен в цикле событий адресата, а слот будет вызываться, когда его поток запущен (т.е. его цикл событий).