| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > В каком треде работает слот? |
| Автор: hexzo 5.10.2011, 12:11 |
| В каком треде срабатывает слот? Может ли один и тот же слот исполняться одновременно, то есть если будет два сигнала подряд связанных с одним и тем же слотом. Короче там есть подводные камни? |
| Автор: borisbn 5.10.2011, 12:39 |
зависит от http://doc.qt.nokia.com/latest/qt.html#ConnectionType-enum может http://doc.qt.nokia.com/latest/threads-qobject.html#signals-and-slots-across-threads |
| Автор: hexzo 5.10.2011, 13:20 |
| Как понимать родство треда с объектом? in the thread which the receiving object has affinity |
| Автор: bsa 5.10.2011, 15:51 | ||
hexzo, чтобы это понять, надо читать полностью, а не урывками:
|
| Автор: hexzo 5.10.2011, 16:52 |
| Слот срабатывает сразу же в том же потоке, в котором происходит вызов emit. Но если слот находится в специальных классах типа QTcpSocket, QTimer, то он сработает при следующем тике их встроеного лупа. Я правильно прочитал? |
| Автор: bsa 6.10.2011, 10:51 |
| hexzo, подозреваю, что нет. Если отправитель сигнала находится в том же потоке, что и приемник, то приемник принимает сигнал сразу. Если отправитель сигнала находится в потоке отличном от потока приемника, то сигнал добавляется в очередь сигналов потока приемника. И доставляется только при обработке этой очереди. Таким образом, если в потоке приемника нет eventLoop'а, то ни один сигнал не будет доставлен. Объект класса QThread по умолчанию находится в том потоке, в котором был вызван new QThread для него. Т.е. он находится не в новом потоке, а в старом. |
| Автор: hexzo 6.10.2011, 11:18 | ||||||||||
bsa
А, помоему ты тоже самое сказал что и я.
Если сигнал вызывается в том же треде с которым родство у получателя.
То слот срабатывает сразу в том же треде.
Некоторые негуишные классы имеют свой встроенный луп. Если принадлежность отправителя и получателя к разным тредам разная, то
слот вызывается при следующем тике лупа треда связаного отношением родства с получателем. |