Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Многопоточная безопасность в Qt


Автор: andrew_121 16.3.2008, 02:43
Всем Доброго времени суток.
Прежде чем приступить к работе над проектом, хотелось-бы узнать Ваше мнение.
Есть задача следующего рода:
1) От некого устройства, получаю данные синхронно(если устройство готово), если не готово, ждем...
2) Полученые данные, обрабатываються, и результат помещается в float* dx, *dy, *dz;
3) После чего, данные должны быть отображены на форме основного окна в, (возможно) QBrush* brush;

Обьясняю мое видение решения:
Из-за синхр. получения данных, создать отдельный поток(ну чтоб ГУИ не тормозился)
И встает вопрос о синхронизации, данные (float* dx, *dy, *dz;) нужно отобразить в QBrush* brush; основного потока.
1) Где лучше разместить (float* dx, *dy, *dz;) в потоке обработки устройства или в основном ?
2) Какие могут быть проблемы ?
3) Как оных избежать ?
4) Что Вы посоветуете ?

Заранее благодарен...

Код

class DataGet:public QThread { // Устройство...
public:
    DataGet(QObject* o = 0):QThread(o) {}
private:
    GettingDevice* dev; // Апаратура...
    float* dx, *dy, *dz; // обработаные данные...
};

class Form:public QDialog { // Основная форма...
public:
    Form(QWidget* o = 0):QDialog(o) {}
private:
    QBrush* brush; // Компонент отображения...
    DataGet* device; // Поток устройства...
};


Автор: JackYF 16.3.2008, 12:34
Цитата(andrew_121 @  16.3.2008,  01:43 Найти цитируемый пост)
Какие могут быть проблемы ?

ну дык, синхронизации и есть.

Бери QMutex и обрамляй им все чтения и записи в структуру (dx,dy,dz). И всё.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)