Поиск:

Ответ в темуСоздание новой темы Создание опроса
> потоки, создать второй поток 
V
    Опции темы
ss
Дата 30.6.2013, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Доброгоо времени суток. 
Есть программа которая собирает инфу о папках. Необходимо процедуру сборки инфы выделить в отдельный поток. 
При запуске потока у меня происходит вылет программы. 
Данный для инициализации потока пробовал передавать через ссылки , потом через сигналы и слоты.
результат работы потока тоже передавал через сигналы и слоты. все равно вылетает


Код

struct Tbufya
{
    QString st;
    int cou;
    qint64 allSize;
    Tbufya(QString _st, qint64 _allSize): st(_st), cou(1), allSize(_allSize){};
    Tbufya():st(""),cou(0),allSize(0){};

};

class returnInfo
{
public:
    QVector<Tbufya> bufFile; //стек расширений файлов, их размер и количество
    int couFolder; //количество подкаталогов
};

class infoSendInit
{
    public:
    QString path;
    returnInfo *infoDisk;
};


обработчик кнопки вызова потока
Код

 thread1 = new MyThread(this);
   // thread1->rootPath = dirmodel->filePath(ui->treeView->selectionModel()->currentIndex()); //задаем корневой капалог для рекурсии

  //  thread1->info = infoDisk;


    connect(this,SIGNAL(signalInitSlot(infoSendInit)),thread1,SLOT(initThread(infoSendInit)));

            infoSendInit data;
emit signalInitSlot(data);


    connect(thread1,SIGNAL(signalData(int)),this,SLOT(printTableInfo(int)));

    thread1->start();


поток
Код

class MyThread : public QThread
{
    Q_OBJECT
public:
    explicit MyThread(QObject *parent = 0);
    QString rootPath;
  //  QDirModel *dirmodel;
    returnInfo *info;
    void run();

signals:
    void signalData(int _a);
    
public slots:
    void initThread(infoSendInit _data);
    
};

Код

QMutex mutex;
    mutex.lock();
    QString directory = this->rootPath; //задаем корневой капалог для рекурсии

    QDirIterator iterator (directory, QDir::Files |QDir::Dirs | QDir::NoSymLinks, QDirIterator::Subdirectories); //настройка обхода каталогов

   // QVector<Tbufya> bufFile; //стек расширений файлов, их размер и количество

    QVector<QString> bufFolder; //стек под пути каталогов

    //ui->label->setText(dirmodel->filePath(ui->treeView->selectionModel()->currentIndex())); //текушая выбранная папка

//*****
info->couFolder = bufFolder.size();

    int g=1;
    emit signalData(g);
    mutex.unlock();


Это сообщение отредактировал(а) ss - 2.7.2013, 21:09

Присоединённый файл ( Кол-во скачиваний: 0 )
Присоединённый файл  program.rar 7,52 Kb
PM MAIL   Вверх
akizelokro
Дата 1.7.2013, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Зачем вы пишете столько кода? Выделяйте основное место, где код вылетает.
И что у вас делает

Код

thread1 = new MyThread(this);


?
Попробуйте запустить new MyThread(); я в Qt не шарю (и вообще ни в чём не шарю), но меня сильно смущает такая конструкция. И что в данном конексте означает this? Мне представляется сомнительной именно такая инициализация экземпляра нового класса

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Guinness
Дата 2.7.2013, 07:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 10



Я может что-то не догнал, но Вы делаете exec() в run()?
PM MAIL   Вверх
ss
Дата 2.7.2013, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



есть кнопка на форме . На ней происходит создание потока, передача данных потоку (стартовый путь обхода папок) и запуск потока (run)
ошибка возникает когда нажимаю на кнопку т.е. вызываю метод run() потока .  программа завершается с кодом -1073741819


задание простое. Я уже сделал рекурсивный обход папок с подсчетом инфы (объект состоящий из списка (vektor) и данного int) (программа без потока работает нормально и стабильно !!!). Основная программа должна передавать директорию выбранной папки потоку а поток должен подготовить инфу и выдать основной программе для вывода ее в TableView



Цитата

thread1 = new MyThread(this);

поток создаю динамически. На счет this не знаю ,(я новичок) посмотрел в книге

Это сообщение отредактировал(а) ss - 2.7.2013, 18:11
PM MAIL   Вверх
ss
Дата 2.7.2013, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

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


 




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


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

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