Russian Qt Forum

Qt => Многопоточное программирование, процессы => Тема начата: sasha111 от Декабрь 24, 2010, 08:52



Название: Потоки
Отправлено: sasha111 от Декабрь 24, 2010, 08:52
Знаю что уже есть куча тем, но разобраться так и не смог

копирование файла на сервер,  пока он нескопируется программа наглухо виснет(


thread.h
Код
C++ (Qt)
#ifndef THREAD_H
#define THREAD_H
#include <mainwindow.h>
#define LIMIT 1000000
 
class Thread : public QThread
{
public:
 Thread();
 ~Thread();
 
 void setMessage(const QString &message);
 void run();
 void stop();
 
 
private:
 QString messageStr;
 volatile bool stopped;
};
 
 
#endif // THREAD_H



thread.cpp
Код
C++ (Qt)
Thread::Thread()
{
 stopped = false;
}
 
 
Thread::~Thread()
{
 
 QThread::wait();
}
 
 
 
 
void Thread::run()
{
 
   QString bbb = "C:/Qt/2010.04/maket-build-desktop/navicat9_lite_en.exe";
 
       QFile fileLayer(bbb);
qDebug() << "start!";
 
         fileLayer.copy("//192.168.155.1/ftp/navicat9_lite_en.exe");
 
 
       qDebug() << "stop!";
 
}
 
 
 
 
void Thread::stop()
{
   stopped = true;
 }


mainwindow.cpp
скопировал только вызов
Код
C++ (Qt)
void MainWindow::on_pushButton_clicked()
{
 
   Thread blo;
   blo.run();
}
 





Название: Re: Потоки
Отправлено: BRE от Декабрь 24, 2010, 08:54
Вообще, поток запускается методом start(), а run() это его тело.
Также wait в деструкторе нужно убрать и создавать объект Thread нужно на куче (через new), иначе он будет разрушаться при выходе из слота, в котором создавался.


Название: Re: Потоки
Отправлено: sasha111 от Декабрь 24, 2010, 09:00
пардон, run() случайно еще вчера поставил, изменил на start()

убрал wait в деструкторе и теперь валиться ошибка QThread: Destroyed while thread is still running


Название: Re: Потоки
Отправлено: alexman от Декабрь 24, 2010, 09:18
Так по new то создаешь объект?
start можно вызывать с приоритетом QThread::Priority выполнения.


Название: Re: Потоки
Отправлено: sasha111 от Декабрь 24, 2010, 09:21
теперь делаю new и не верею глазам, все работает
Спасибо)