Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [qt4]Посылка сигналов между потоками 
:(
    Опции темы
BiTOk
  Дата 11.5.2011, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброе время суток. Встала задача написания двухпоточной программы: один отвечает за интерфейс, второй за непрерывный процесс моделирования некой системы. Данные для моделирования вводятся в главном потоке - в потоке интерфейса, работа с ними идёт во втором потоке. При работе второго потока необходимо передавать некоторые данные для вывода на форму в первый поток. Если я организую передачу этой информации с помощью сигналов-слотов, то где будет работать соответствующий слот, если сигнал послан из потока №2? Как лучше организовать структуру такой программы?
PM MAIL   Вверх
Artemon
Дата 11.5.2011, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

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



Цитата(BiTOk @  11.5.2011,  18:39 Найти цитируемый пост)
где будет работать соответствующий слот, если сигнал послан из потока №2? 

По-умолчанию В потоке #1


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
BiTOk
Дата 11.5.2011, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Откуда такие умолчания и как их изменить?
ADD
Какую литературу можно почитать по таким тонкостям? В хелпе ответ на вышепоставленный вопрос найден не был.

Это сообщение отредактировал(а) BiTOk - 11.5.2011, 20:27
PM MAIL   Вверх
Artemon
Дата 11.5.2011, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

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



Код

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection )


В методе QObject::connect() последний параметр отвечает за тип соединения, вот описание этого параметра:

Код

enum Qt::ConnectionType

This enum describes the types of connection that can be used between signals and slots. In particular, it determines whether a particular signal is delivered to a slot immediately or queued for delivery at a later time.Constant    Value    Description
Qt::AutoConnection    0    (default) If the signal is emitted from a different thread than the receiving object, the signal is queued, behaving as Qt::QueuedConnection. Otherwise, the slot is invoked directly, behaving as Qt::DirectConnection. The type of connection is determined when the signal is emitted.
Qt::DirectConnection    1    The slot is invoked immediately, when the signal is emitted.
Qt::QueuedConnection    2    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.
Qt::BlockingQueuedConnection    4    Same as QueuedConnection, except the current thread blocks until the slot returns. This connection type should only be used where the emitter and receiver are in different threads. Note: Violating this rule can cause your application to deadlock.
Qt::UniqueConnection    0x80    Same as AutoConnection, but the connection is made only if it does not duplicate an existing connection. i.e., if the same signal is already connected to the same slot for the same pair of objects, then the connection will fail. This connection type was introduced in Qt 4.6.
Qt::AutoCompatConnection    3    The default type when Qt 3 support is enabled. Same as AutoConnection but will also cause warnings to be output in certain situations. See Compatibility Signals and Slots for further information.


Добавлено через 9 минут и 46 секунд
Если поставишь Qt::DirectConnection, то слот будет выполняться в потоке, который сделал emit
Если поставишь Qt::QueuedConnection, то слот будет выполняться в потоке,  в котором определен слот.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
borisbn
Дата 12.5.2011, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(BiTOk @  11.5.2011,  20:17 Найти цитируемый пост)
Какую литературу можно почитать по таким тонкостям? В хелпе ответ на вышепоставленный вопрос найден не был.

http://doc.qt.nokia.com/4.7-snapshot/threa...-across-threads


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

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

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


 




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


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

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