Поиск:

Ответ в темуСоздание новой темы Создание опроса
> межпоточная передача данных 
:(
    Опции темы
gordmiand
Дата 23.6.2012, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

class Potok1: public QThread
{
Repacking *NetData;
char DataBuf[65535];
void run();
}
/////////////////////////////////////////
Potok1::Potok1(Repacking *NData)
{
NetData = new Repacking();
NetData = NData;
}
/////////////////////////////////////////
void Potok1::run()
{
// чтение данных из сети в DataBuf
NetData->Unpack((void*)&DataBuf);
}
/////////////////////////////////////////
class Repacking:: public QObject()
{
void Unpack(void *);
Msg1 poMsg1; // небольшие классы для хранения неких данных
Msg2 poMsg2;
Msg3 poMsg2; // всего такого рода классов может быть штук 15
…
signals:
 void sigEndUnpacking(???);
}
/////////////////////////////////////////
Repacking::Unpack(void *data)
{
// чтение данных из сети
// распаковка (запись) data-данных в объекты  poMsg1, poMsg2, poMsg3 (в каждый объект считываются “свои” данные из буфера data);
emit sigEndUnpacking(???);
}
/////////////////////////////////////////
 class MainClass: public QMainWindow
{
Potok1 *poPotok1;
Repacking *poRepacking;

public slots:
 void sltEndUnpacking(???);
...
}
/////////////////////////////////////////
MainClass::MainClass()
{
poRepacking = new Repacking(); 
poPotok1 = new Potok1(poRepacking);
poPotok1->start(); 
}
/////////////////////////////////////////


Мне надо передать (сигналом sigEndUnpacking(???)) распакованные данные (poMsg1, poMsg2, poMsg3) из обменного потока Potok1 (в котором запускается метод распаковки Unpack() класса Repacking) в слот sltEndUnpacking(???) класса MainClass (это уже другой поток).

Вопросы:
1. какой контейнер для объектов данных poMsg1, poMsg2, poMsg3 мне лучше использовать, чтобы передать их ОДНИМ сигналом с учетом того, что объекты все разного размера и типа и таких MsgXX-классов может быть достаточно много (как написано вверху в коде - штук 15)
2. что лучше передавать между разными потоками: сами данные или указатели на них?
Передавать указатели на данные из одного потока и использовать их в другом потоке опасно, так как данные в обменном потоке (объекты poMsg1, poMsg2, poMsg3) обновляются быстрее, чем они используются в MainClass-e (используются эти данные для неких расчетов и индикации) и непонятно какие данные могут прочитаться по этому указателю в очередной раз. 
Передавать сами данные более “тяжело”, чем указатели (суммарный объем этих данных может быть достаточно велик для достаточно немощного компьютера, на котором эта программа работает (компьютер поменять нельзя!!!)) и непонятно какой контейнер надо использовать для разного размера и типа данных (вопрос 1).
Подскажите пож-та максимально простую (оптимальную) программную реализацию вопросов 1-2…



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

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

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


 




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


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

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