Qt

Qt QtConcurrent(Qt thread)

끄적a 2021. 1. 5. 15:56

Qt에서 thread를 지원해주는 기능이다. 

Qt에서 기본적으로 thread를 사용 하는 방법은 아래와 같다

class SimpleThread : public QThread
{
    Q_OBJECT

    void run() override {
        for(int i = 0 ; i < 10 ; i++) {
            sleep(1);
            ++numUsed;
            qDebug("numUsed : %d", numUsed);
        }
    }

public:
    SimpleThread() {}
};
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    SimpleThread simpleThread;
    simpleThread.start();

    return a.exec();
}

아래는 QtConcurrent를 이용한 thread 사용 예이다. 

void hello(QString name)
{
    qDebug() << "Hello" << name << "from" << QThread::currentThread();

    for(int i = 0 ; i < 3 ; i++)
    {
        QThread::sleep(1);
        qDebug("[%s] i = %d", name.toLocal8Bit().data(), i);
    }
}



int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    
    QFuture<void> f1 = QtConcurrent::run(hello, QString("Alice")); // hello함수가 thread형태로 수행이 된다. 
    QFuture<void> f2 = QtConcurrent::run(hello, QString("Bob"));

    f1.waitForFinished();
    f2.waitForFinished();

    return a.exec();
}

QtConcurrent::run() - 다른 쓰레드에서 함수를 실행한다.

QFuture - 비동기의 결과를 제어하는 클래스이다.

QFuture는 실제로 waitForFinished()<결과를 기다리거나>, result()<결과 값을 확인하거나>, cancel(), pause(), or resume()등의 메소드들을 제공한다.