испускать сигнал Qt из не-Qt Thread или основного цикла событий Qt с параметром 4,5 - PullRequest
12 голосов
/ 15 января 2010

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

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

например:

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

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

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

спасибо

1 Ответ

9 голосов
/ 15 января 2010

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

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

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

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