Russian Qt Forum
Май 05, 2024, 17:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: передача сообщений/данных между потоками  (Прочитано 8962 раз)
Anton
Гость
« : Январь 06, 2006, 15:46 »

как передавать сообщения/данные между потоками?
Записан
yshurik
Гость
« Ответ #1 : Январь 06, 2006, 16:09 »

Mожно через те же самые Signal-Slots только нужны Queued Connections.
Записан
Dendy
Гость
« Ответ #2 : Январь 06, 2006, 17:11 »

Сигнал-Слот передаёт собьІтия между потоками асинхронно. Естесственно в принимающем потоке должен бьІть организован цикл передачи собщений.

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

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

Q_DECLARE_METATYPE( MyClass )

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


Подробнее здесь: QMetaType
Записан
Anton
Гость
« Ответ #3 : Январь 07, 2006, 13:26 »

а как быть с данными? Передавать в поток указатель на область памяти, изменять ее блокируя мьютексами?

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

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

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

Q_DECLARE_METATYPE( MyClass )

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


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


Что-ьто я этого не нашел...qt334
Записан
KADABRA
Гость
« Ответ #4 : Январь 07, 2006, 13:51 »

Anton
Цитировать
Что-ьто я этого не нашел...qt334

В 4.1.0 точно есть Улыбающийся
Записан
Dendy
Гость
« Ответ #5 : Январь 07, 2006, 15:45 »

В Qt3 нет механизма асинхронного коннекта и передачи данньІх между потоками. Ентот велосипед нужно изобретать заново, обвязавшись терпением и мутексами.
Записан
Hellenna
Гость
« Ответ #6 : Январь 11, 2006, 11:48 »

Цитата: "Anton"
как передавать сообщения/данные между потоками?

можно не зацикливаться на qt и использовать системное API Подмигивающий
Linux/Unix/Mac:
Код:

$man sigaction
$man signal
Записан
AlexKiriukha
Гость
« Ответ #7 : Январь 11, 2006, 15:44 »

Цитата: "Hellenna"
Цитата: "Anton"
как передавать сообщения/данные между потоками?

можно не зацикливаться на qt и использовать системное API Подмигивающий
Linux/Unix/Mac:
Код:

$man sigaction
$man signal


Можно, но скорее всего это неприемлемо, так как не кроссплатформенно.
Записан
Hellenna
Гость
« Ответ #8 : Январь 11, 2006, 16:45 »

Цитата: "AlexKiriukha"


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


Код:

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


очень кросплатформенно Подмигивающий только надо знать как работают потоки в всех системах
Записан
Dendy
Гость
« Ответ #9 : Январь 12, 2006, 13:16 »

Та не ребята. Qt прогрессировала немеряно по сравнению с третьей версией. Сия проблема решена специально для вас умами троллей. СамьІй правильньІй способ - перейти на 4-ку.

Кстати, а какие проблемьІ с етим?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.046 секунд. Запросов: 20.