Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В каком треде работает слот? 
V
    Опции темы
hexzo
Дата 5.10.2011, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



В каком треде срабатывает слот? Может ли один и тот же слот исполняться одновременно, то есть если будет два сигнала подряд связанных с одним и тем же слотом. Короче там есть подводные камни?
PM MAIL   Вверх
borisbn
Дата 5.10.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(hexzo @  5.10.2011,  12:11 Найти цитируемый пост)
В каком треде срабатывает слот?

зависит от Qt::ConnectionType
Цитата(hexzo @  5.10.2011,  12:11 Найти цитируемый пост)
Может ли один и тот же слот исполняться одновременно

может
Цитата(hexzo @  5.10.2011,  12:11 Найти цитируемый пост)
Короче там есть подводные камни?

Treads & Slots




--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
hexzo
Дата 5.10.2011, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Как понимать родство треда с объектом?
in the thread which the receiving object has affinity
PM MAIL   Вверх
bsa
Дата 5.10.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



hexzo, чтобы это понять, надо читать полностью, а не урывками:
Цитата
Note that for QObjects that are created before QApplication, QObject::thread() returns zero. This means that the main thread will only handle posted events for these objects; other event processing is not done at all for objects with no thread. Use the QObject::moveToThread() function to change the thread affinity for an object and its children (the object cannot be moved if it has a parent).

PM   Вверх
hexzo
Дата 5.10.2011, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



Слот срабатывает сразу же в том же потоке, в котором происходит вызов emit. Но если слот находится в специальных классах типа QTcpSocket, QTimer, то он сработает при следующем тике их встроеного лупа.
Я правильно прочитал?  smile 

Это сообщение отредактировал(а) hexzo - 5.10.2011, 16:52
PM MAIL   Вверх
bsa
Дата 6.10.2011, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 24
Всего: 196



hexzo, подозреваю, что нет.
Если отправитель сигнала находится в том же потоке, что и приемник, то приемник принимает сигнал сразу.
Если отправитель сигнала находится в потоке отличном от потока приемника, то сигнал добавляется в очередь сигналов потока приемника. И доставляется только при обработке этой очереди. Таким образом, если в потоке приемника нет eventLoop'а, то ни один сигнал не будет доставлен.

Объект класса QThread по умолчанию находится в том потоке, в котором был вызван new QThread для него. Т.е. он находится не в новом потоке, а в старом.
PM   Вверх
hexzo
Дата 6.10.2011, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 30.1.2011

Репутация: нет
Всего: нет



bsa 
Цитата
подозреваю, что нет.

А, помоему ты тоже самое сказал что и я.

Цитата
If the signal is emitted in the thread which the receiving object has affinity then the behavior is the same as the Direct Connection.

Если сигнал вызывается в том же треде с которым родство у получателя.
Цитата
The slot is invoked immediately, when the signal is emitted. The slot is executed in the emitter's thread, which is not necessarily the receiver's thread.

То слот срабатывает сразу в том же треде.
Цитата
non-GUI Qt classes that require the presence of an event loop (such as QTimer, QTcpSocket, and QProcess).

Некоторые негуишные классы имеют свой встроенный луп.

Если принадлежность отправителя и получателя к разным тредам разная, то
Цитата
Queued Connection The slot is invoked when control returns to the event loop of the receiver's thread. The slot is executed in the receiver's thread.

слот вызывается при следующем тике лупа треда связаного отношением родства с  получателем.

Это сообщение отредактировал(а) hexzo - 6.10.2011, 11:21
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.