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()등의 메소드들을 제공한다.