Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дополнительные материалы.pdf
Скачиваний:
3
Добавлен:
07.06.2025
Размер:
12.29 Mб
Скачать

РАЗРАБОТКА НА QT ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ

QTHREAD: ПРИМЕР

Класс, работающий в другом потоке class Worker : public QObject

{

Q_OBJECT public slots:

void doWork(const QString &parameter) { QString result;

emit resultReady(result);

}

signals:

void resultReady(const QString &result);

};

РАЗРАБОТКА НА QT ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ

QTHREAD: ПРИМЕР РЕАЛИЗАЦИИ ВТОРИЧНОГО ПОТОКА

class Controller : public QObject

{

Q_OBJECT

QThread workerThread; public:

Controller() {

Worker *worker = new Worker; worker->moveToThread(&workerThread);

connect(&workerThread, &QThread::finished, worker, &QObject::deleteLater); connect(this, &Controller::operate, worker, &Worker::doWork); connect(worker, &Worker::resultReady, this, &Controller::handleResults); workerThread.start();

}

...

РАЗРАБОТКА НА QT ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ

QTHREAD: ПРИМЕР РЕАЛИЗАЦИИ ВТОРИЧНОГО ПОТОКА

~Controller() { workerThread.quit(); workerThread.wait();

}

public slots:

void handleResults(const QString &); signals:

void operate(const QString &);

};

РАЗРАБОТКА НА QT ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ

QTHREAD: ПРИМЕР НАСЛЕДОВАНИЯ

class WorkerThread : public QThread

{

Q_OBJECT

void run() override { QString result;

emit resultReady(result);

}

signals:

void resultReady(const QString &s);

};

void MyObject::startWorkInAThread()

{

WorkerThread *workerThread = new WorkerThread(this);

connect(workerThread, &WorkerThread::resultReady, this, &MyObject::handleResults); connect(workerThread, &WorkerThread::finished, workerThread, &QObject::deleteLater); workerThread->start();

}

QTHREADPOOL

6

И QRUNNABLE

 

РАЗРАБОТКА НА QT ДЛЯ МОБИЛЬНЫХ УСТРОЙСТВ

QTHREADPOOL И QRUNNABLE

QRunnable

»run() - запуск

QThreadPool

»start() - начать работу QRunnable

»globalInstance() - пул потоков приложения

»autoDelete() - автоматическое удаление QRunnable

»tryStart() - может повторно вызвать QRunnable

»setExpiryTimeout() - время затухания

»maxThreadCount() - максимальное количество потоков

»activeThreadCount() - количество активных потоков

»reserveThread(), releaseThread() - зарезервировать или завершить поток

doc.qt.io/qt-5/qthreadpool.html doc.qt.io/qt-5/qrunnable.html