12 Haziran 2018 Salı

QThread Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <QThread>
Bu sınıfı kalıtmak yerine QtConcurrent::run() tercih edilebilir.

finished signal
Açıklaması şöyle.
From Qt 4.8 onwards, it is possible to deallocate objects that live in a thread that has just ended, by connecting the finished() signal to QObject::deleteLater().
sleep metodu
Şöyle yaparız.
QThread::sleep(5);
start metodu
Örnek
Şöyle yaparız.
QThread thread;
Worker worker;
worker.moveToThread(&thread1);

QObject::connect(&thread1, &QThread::started, &worker, &Worker::run);

thread.start();
Foo nesnesi şöyledir.
class Worker: public QObject
{
public:
  void run()
  {
    ...
  }
};
Örnek
Şöyle yapabiliriz. Worker nesnesi şöyledir.
class Worker : public QObject
{
Q_OBJECT
public:
  explicit Worker(QObject *parent = nullptr);

signals:
  void finished(void);

public slots:
  void run(void);
};
run metodu şöyledir
void Worker::process(void)
{
  ...
  emit finished();
}
Bazıları thread'i başlatma ve silme kodunu şöyle yapıyor ancak bence bu kullanım yanlış.
QThread *thread = new QThread();
Worker *worker = new Worker ()
worker->moveToThread(thread);

QObject::connect(thread,SIGNAL(started()), worker, SLOT(process()), Qt::QueuedConnection);
QObject::connect(thread,SIGNAL(finished()), thread, SLOT(deleteLater()));
QObject::connect(worker,SIGNAL(finished()), thread, SLOT(quit()));
QObject::connect(worker,SIGNAL(finished()), worker, SLOT(deleteLater()));

thread->start();

Hiç yorum yok:

Yorum Gönder