Поиск:

Ответ в темуСоздание новой темы Создание опроса
> доступ к данным потока 
:(
    Опции темы
gordmiand
Дата 12.11.2010, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



сразу прямо в main-е запускаю поток (так надо):
Код

#include <QtGui/QApplication>
#include "mainwindow.h"
#include "my_thr.h"


    my_thr *potok;


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    potok = new my_thr();
    potok->start(QThread::TimeCriticalPriority);

    w.show();
    return a.exec();
}

//////////////////////////////////////////////////////////////
#include <QThread>


class my_thr : public QThread
{
     Q_OBJECT
public:
    my_thr();
    void run();

    int per1;
    short mas[100];
};
/////////////////////////////////////////////////////////////
#include "my_thr.h"
#include <QDebug>

my_thr::my_thr()
{      }


void my_thr::run()
{
    qDebug() << "Hello";
}
  
а как мне обеспечить возможность доступа к членам (per1, mas[]) класса my_thr из других, например из mainwindow.cpp, модулей программы? подскажите пож-та ны вышеуказанном примере... 

PM MAIL   Вверх
null56
Дата 13.11.2010, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 6
Всего: 12



Цитата(gordmiand @  12.11.2010,  22:30 Найти цитируемый пост)
а как мне обеспечить возможность доступа к членам (per1, mas[]) класса my_thr из других, например из mainwindow.cpp, модулей программы? подскажите пож-та ны вышеуказанном примере... 

если я правильно понял, вопрос про организацию кода программы? если да, тогда, как вариант (!!!), можно хранить ссылку(или указатель) на объект класса my_thr внутри класса mainwindow
Шаги:
1) подключи файл my_thr.h в заголовке mainwindow.h
Код

// файл mainwindow.h
#include "my_thr.h"


2) создай ссылку или указатель, в переменных - членах класса MainWindow,  на объект класса my_thr, инициализируй ее в конструкторе
Код

class MainWindow
{
public:
    // конструктор - инициализирует переменную член класса m_MyThread - теперь у тебя есть доступ к объекту, а вместе с ним и к его переменным
   MainWindow(my_thr * thread = 0) : m_MyThread(thread)

private:
   //переменная член на твой поток
  my_thr * m_MyThread;
};


Другие варианты:
- сделать объект класса my_thread статическим (не есть хорошо), как вариант синглтон, и обращаться к нему через статические методы. в этом случае не придется изменять конструктор MainWindow и lдобавлять туда переменные, но возникает сложность следить за завершением потока и синхронизацией данных, учитывая, что у тебя там не все атомарные типы (short [])
- делать общие переменные внутри класса my_thr, то есть сам класс может быть создан внутри стека, но работает он с какими  - то глобальными данными... в этом случае возникает сложность синхронизации этих данных,

ну это, что пришло на ум.... я бы наверное сделал через синглон, тогда поток был бы общим для всех классов приложения, запуск и завершение потока я бы вынес в конструктор и деструктор основного окна приложения соотвественно

как - то так... ЭТО если я правильно понял, то чего ты спрашиваешь

Это сообщение отредактировал(а) null56 - 13.11.2010, 01:59
PM MAIL   Вверх
SABROG
Дата 13.11.2010, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Если нужно обработать данные в потоке и вернуть результат в класс виджета, то лучше посмотреть в сторону QtConcurrent, в класс MainWindow добавить QFutureWatcher и результаты брать у него, когда придет сигнал о завершении операции потока.


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

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

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


 




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


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

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