Russian Qt Forum

Qt => Общие вопросы => Тема начата: Anton от Январь 06, 2006, 15:46



Название: передача сообщений/данных между потоками
Отправлено: Anton от Январь 06, 2006, 15:46
как передавать сообщения/данные между потоками?


Название: передача сообщений/данных между потоками
Отправлено: yshurik от Январь 06, 2006, 16:09
Mожно через те же самые Signal-Slots только нужны Queued Connections.


Название: передача сообщений/данных между потоками
Отправлено: Dendy от Январь 06, 2006, 17:11
Сигнал-Слот передаёт собьІтия между потоками асинхронно. Естесственно в принимающем потоке должен бьІть организован цикл передачи собщений.

И ещё. Так как данньІе между потоками передаются асинхронно - они должньІ бьІть сохраненьІ где-то в промежуточной переменной. Для ентого тип нужно зарегистрировать в Qt:

Код:
class MyClass
{
...
};

Q_DECLARE_METATYPE( MyClass )

connect( sender, SIGNAL( MyClass ), receiver, SLOT( myclass ) );


Подробнее здесь: QMetaType


Название: передача сообщений/данных между потоками
Отправлено: Anton от Январь 07, 2006, 13:26
а как быть с данными? Передавать в поток указатель на область памяти, изменять ее блокируя мьютексами?

добавлено спустя 4 минуты:

 
И ещё. Так как данньІе между потоками передаются асинхронно - они должньІ бьІть сохраненьІ где-то в промежуточной переменной. Для ентого тип нужно зарегистрировать в Qt:

Код:
class MyClass
{
...
};

Q_DECLARE_METATYPE( MyClass )

connect( sender, SIGNAL( MyClass ), receiver, SLOT( myclass ) );


Подробнее здесь: QMetaType


Что-ьто я этого не нашел...qt334


Название: передача сообщений/данных между потоками
Отправлено: KADABRA от Январь 07, 2006, 13:51
Anton
Цитировать
Что-ьто я этого не нашел...qt334

В 4.1.0 точно есть :)


Название: передача сообщений/данных между потоками
Отправлено: Dendy от Январь 07, 2006, 15:45
В Qt3 нет механизма асинхронного коннекта и передачи данньІх между потоками. Ентот велосипед нужно изобретать заново, обвязавшись терпением и мутексами.


Название: Re: передача сообщений/данных между потоками
Отправлено: Hellenna от Январь 11, 2006, 11:48
Цитата: "Anton"
как передавать сообщения/данные между потоками?

можно не зацикливаться на qt и использовать системное API ;)
Linux/Unix/Mac:
Код:

$man sigaction
$man signal


Название: Re: передача сообщений/данных между потоками
Отправлено: AlexKiriukha от Январь 11, 2006, 15:44
Цитата: "Hellenna"
Цитата: "Anton"
как передавать сообщения/данные между потоками?

можно не зацикливаться на qt и использовать системное API ;)
Linux/Unix/Mac:
Код:

$man sigaction
$man signal


Можно, но скорее всего это неприемлемо, так как не кроссплатформенно.


Название: Re: передача сообщений/данных между потоками
Отправлено: Hellenna от Январь 11, 2006, 16:45
Цитата: "AlexKiriukha"


Можно, но скорее всего это неприемлемо, так как не кроссплатформенно.


Код:

#ifdef Q_WS_X11
...
#else
#ifdef Q_WS_MAC
....
#else
....


очень кросплатформенно ;) только надо знать как работают потоки в всех системах


Название: передача сообщений/данных между потоками
Отправлено: Dendy от Январь 12, 2006, 13:16
Та не ребята. Qt прогрессировала немеряно по сравнению с третьей версией. Сия проблема решена специально для вас умами троллей. СамьІй правильньІй способ - перейти на 4-ку.

Кстати, а какие проблемьІ с етим?