ورود

View Full Version : چند نخی



arashz4
پنج شنبه 24 دی 1394, 11:38 صبح
سلام
من یه مثال ساده برای Qthread میخام مثلا یه کار ساده در یه ترد جدید انجام بده مثل :

qDebug()<<"new thread";

AliRezaBeytari
پنج شنبه 24 دی 1394, 13:02 عصر
mythread.h :


#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QObject>
#include <QWidget>
#include <QThread>
#include <QDebug>
class MyThread : public QThread
{
Q_OBJECT
public:
explicit MyThread(QWidget *parent, QString threadName);
~MyThread();
virtual void run();
private:
QString THREAD_NAME;
};
#endif // MYTHREAD_H


mythread.cpp :



#include "mythread.h"
MyThread::MyThread(QWidget *parent, QString threadName) : QThread(parent)
{
THREAD_NAME = threadName;
}
MyThread::~MyThread()
{
}
void MyThread::run()
{
qDebug() << THREAD_NAME << "thread is running...";
}


mainwindow.cpp :



#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mythread.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MyThread *myThread1 = new MyThread(this, "Thread 1");
MyThread *myThread2 = new MyThread(this, "Thread 2");
MyThread *myThread3 = new MyThread(this, "Thread 3");
myThread1->run();
myThread2->run();
myThread3->run();
}
MainWindow::~MainWindow()
{
delete ui;
}

arashz4
پنج شنبه 24 دی 1394, 16:43 عصر
برای یه ترد حتما باید یه کلاس بسازی؟

AliRezaBeytari
پنج شنبه 24 دی 1394, 17:37 عصر
تا اونجایی که من میدونم ، بله !

returnx
پنج شنبه 24 دی 1394, 20:31 عصر
برای موارد ساده بهتره از
QtConcurrent::run()
استفاده کنید...
با این روش شما به راحتی یک تابع را در thread جداگانه اجرا خواهید کرد و مجبور هم نیستید با مواردی مثل Mutex در گیر شوید...

حامد مصافی
جمعه 25 دی 1394, 11:36 صبح
خیر، می‌تونید یک QThread جدید بسازید و با متد moveToThread یک آبجکت را به این ترد جدید بفرستید.