Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: 0...-5 от Сентябрь 08, 2010, 06:28



Название: Межпоточный обмен данными
Отправлено: 0...-5 от Сентябрь 08, 2010, 06:28
Доброе утро! Вопрос состоит в следующем.
Имеется главный и порождаемый в нем потоке, которые связаны через сигнал - слот. Пытался в порожденном потоке генерировать сигнал, параметром которого является собственная структура. При этом связанный с ним слот основного потока никогда не получает управления(в теле слота выдавал на экран сообщение, ставил точку останова - эффекта ноль). Пробовал различные типы соединений - никаких изменений. Слот срабатывал, только если в параметрах передавать double. Стало интересно, попробовал передать QByteArray, QList<double> - результат такой же, как со структурой. В чем здесь дело?


Название: Re: Межпоточный обмен данными
Отправлено: Denjs от Сентябрь 08, 2010, 07:26
... Пытался в порожденном потоке генерировать сигнал, параметром которого является собственная структура. ...
Вы вашу структуру зарегистрировали в системе метатипов QT?
Q_DECLARE_METATYPE ( Type )
+
int qRegisterMetaType ( const char * typeName )

Цитата: QT_ASSISTANT
Adding a Q_DECLARE_METATYPE() makes the type known to all template based functions, including QVariant. Note that if you intend to use the type in queued signal and slot connections or in QObject's property system, you also have to call qRegisterMetaType() since the names are resolved at runtime.


Название: Re: Межпоточный обмен данными
Отправлено: 0...-5 от Сентябрь 08, 2010, 08:15
Хм...а в каком месте приложения писать этот макрос? Я подключаю отдельный файл structures.h, в котором описаны все используемые приложением структуры. И еще, остается открытым вопрос почему не работает передача типов QList и QByteArray.


Название: Re: Межпоточный обмен данными
Отправлено: alexman от Сентябрь 08, 2010, 08:38
int qRegisterMetaType ( const char * typeName ) достаточно. Вызывать перед connect.


Название: Re: Межпоточный обмен данными
Отправлено: Denjs от Сентябрь 08, 2010, 09:03
Хм...а в каком месте приложения писать этот макрос? Я подключаю отдельный файл structures.h, в котором описаны все используемые приложением структуры. И еще, остается открытым вопрос почему не работает передача типов QList и QByteArray.
В любом месте до вызова первого сигнала.
QList и QByteArray по умолчанию не зарегистррованы.


Название: Re: Межпоточный обмен данными
Отправлено: 0...-5 от Сентябрь 08, 2010, 11:48
Спасибо большое :)