Я пытаюсь использовать QThread, но я не могу это сделать :( Мой образец резьбы:QThread - проблемы с ним (начинающий)
#include "worker.h"
#include "mainwindow.h"
#include <QDebug>
Worker::Worker() {}
Worker::~Worker() {
qDebug() << "Worker ends.";
}
void Worker::run() {
qDebug() << "Worker start.";
sleep(2);
emit finished();
}
И код on_btnStart_clicked():
Worker *worker = new Worker;
QThread *workerThread = new QThread(this);
connect(workerThread, SIGNAL(started()), worker, SLOT(start()));
connect(workerThread, SIGNAL(finished()), worker, SLOT(quit()));
worker->moveToThread(workerThread);
workerThread->start();
Работник запускается, но никогда не заканчивается (если я закрываю приложение, я получаю QThread: Destroyed while thread is still running
. Другая проблема - как я могу передавать данные между потоком и моим приложением? Я хочу использовать QThread для QLabel (пример: таймер). любой хороший учебник, который я могу выполнить без проблем лемы. Кто-нибудь может мне помочь?
И, если я могу спросить, как я могу начать поток, как onCreate() для формы? Я хочу создать простой таймер для подсчета времени запуска приложения.
С уважением
Вы подключаете 'workerThread :: started()' к 'Worker :: start()', но в коде, который вы указали, есть 'Worker :: run()', а не 'Worker :: start()'. Проверьте, возвращает ли 'connect'' true' или 'false'. – Paul
_I не может найти хороший учебник, который я могу выполнить без проблем. Кто-нибудь может мне помочь? Не достаточно ли/примеров/нитей? Кроме того, вы можете захотеть прочитать пометку [Threading Basics] (http://qt-project.org/doc/qt-4.8/thread-basics.html) в qt-проекте. –
Paul
@Paul - 'Object :: connect: нет такого слота QThread :: run() в mainwindow.cpp: 22'; at/usr/share/qt4/doc Я ничего не нахожу; в qt-project.org docs я нахожу код как мой, но он не работает; спасибо за ссылку, я попробую это – aso