crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> При запуске Qthread приложение вылетает с ошибкой
Asgardian2010
  опции профиля:
сообщение 19.10.2012, 11:20
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 19.10.2012
Пользователь №: 3569

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет. столкнулся с необходимостью вывести выполнение функции в поток. Написал по примеру создание и вызов потока, который просто записывает в файл значение, но программа вылетает при запуске потока. Буду рад любой помощи.

thread.h
#ifndef THREAD_H
#define THREAD_H
#include <QThread>
#include <QFile>
#include <QTextStream>
#include <mainwindow.h>

class   Myth : public QThread
{
    Q_OBJECT
public:
    void run()
    {
        QFile file ("d://1.txt");
        file.open(QIODevice::Append|QIODevice::Text);
        QTextStream out (&file);

        for (int i =0; i<123; ++i)
        {
            int a=i;
            out<<"ec";
            out<<a;
        }
        file.close();
    }
};
#endif // THREAD_H


mainwindow.cpp

#include "thread.h"
void MainWindow::on_pushButton_3_clicked()
{
    Myth thread1;
    thread1.start();
}


При нажатии на кнопку на форме вылетают 2 ошибки
Прикрепленное изображение

Прикрепленное изображение


Если смотреть под отладчиком, вылетает ошибка
Прикрепленное изображение
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.10.2012, 11:39
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Asgardian2010 @ 19.10.2012, 14:20) *
void MainWindow::on_pushButton_3_clicked()
{
Myth thread1;
thread1.start();
}
по завершении этой функции объект thread1 будет удалён.

И c инклюдами у тебя как-то кривовато

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Asgardian2010
  опции профиля:
сообщение 19.10.2012, 11:46
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 19.10.2012
Пользователь №: 3569

Спасибо сказали: 0 раз(а)




Репутация:   0  


Да, заработало, спасибо :clapping:
а что не так с инклюдами?)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.10.2012, 12:17
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Asgardian2010 @ 19.10.2012, 14:46) *
а что не так с инклюдами?)
общая идея:
каждому cpp-файлу сопоставляется файл с кратким описанием - заголовочный файл (.h)
Каждому cpp-файлу нужен его заголовочный, т.е. cpp-файл содержит строку
#include "***.h"
и без крайней надобности в h-файл не включаются чужие заголовочники.

У тебя в thread.h явно лишнее включение - <mainwindow.h> (он не требуется для компиляции thread.h)

для компилятора (при компиляции mainwindow.cpp) будет такое включение:
mainwindow.h -> thread.h -> mainwindow.cpp

Следовало бы сделать:
mainwindow.h -> mainwindow.cpp
thread.h -> mainwindow.cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Asgardian2010
  опции профиля:
сообщение 19.10.2012, 13:36
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 19.10.2012
Пользователь №: 3569

Спасибо сказали: 0 раз(а)




Репутация:   0  


а,это да. такая путаница возникла,когда я изначально пытался вызвать метод класса QmainWindow в классе потока)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 16.4.2024, 23:14