Jurik-Phys.Net

~ Простота и ясность ~

Инструменты пользователя

Инструменты сайта


Боковая панель

Категории

Контакты

itechnology:cpp:multithread

Многопоточность в С/С++

Native С/С++

  • Многопоточное программирование в С++ на YouTube канале #SimpleCode

Qt-lirary

  • Краткая реализация подхода c moveToThread().
    Предполагается, что execute() по завершении работы вызовет emit finished():
    #include <QThread> 
    .
    . 
    // В конструкторе основной формы:
    // а) создание членов класса основной формы;
    QThread *thread = new QThread;
    Worker  *worker = new Worker();
    // б) перемещение worker'а в созданный поток
    worker->moveToThread(thread);
    // в) установка необходимые соединения 
    // в.1) сигнал finished c флагом успешности.
    connect(worker, &Worker::finished, this, [](bool state){
        if (state) {
            std::cout << "Worker отработал успешно\n";
        } 
        else {
            std::cout << "Worker столкнулся с ошибкой\n";
        }
    });
    // в.2) выполнение полезной работы
    // при запуске потока начинается выполнение Worker::execute()
    connect(thread, &QThread::started, worker, &Worker::execute);
    // в.3) при сигнале finished worker'а выход из потока и его закрытие
    connect(worker, &Worker::finished, thread, &QThread::quit);
    // в.4) удаление объекта worker
    connect(worker, &Worker::finished, worker, &QObject::deleteLater);
    // в.5) удаление, ставшего ненужным созданного ранее потока thread
    connect(thread, &QThread::finished, thread, &QObject::deleteLater);
    // г) Запуск созданного и настроенного потока на выполнение
    thread->start();
itechnology/cpp/multithread.txt · Последнее изменение: 2024/06/05 00:11 — jurik_phys

Инструменты страницы