한국어
Qt


Qt에서 쓰레드를 생성하는 방법은 몇가지가 있는데 여기서는 QtConcurrent를 이용한 벙법을 소개한다.

예제소스이다

 #include <QCoreApplication>
#include <qtconcurrentrun.h>
#include <QThread>

#ifndef QT_NO_CONCURRENT

void myRunFunction(QString name)
{
    for(int i = 0; i <= 5; i++)
    {
        qDebug() << name << " " << i <<
                    "from" << QThread::currentThread();
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QFuture<void> t1 = QtConcurrent::run(myRunFunction, QString("A"));
    QFuture<void> t2 = QtConcurrent::run(myRunFunction, QString("B"));
    QFuture<void> t3 = QtConcurrent::run(myRunFunction, QString("C"));

    t1.waitForFinished();
    t2.waitForFinished();
    t3.waitForFinished();

    return a.exec();
}

#else

#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QString text("Qt Concurrent is not yet supported on this platform");

    QLabel *label = new QLabel(text);
    label->setWordWrap(true);

    label->show();
    qDebug() << text;

    app.exec();
}
#endif

.pro파일에는 아래와 같은 행을 추가 해야한다.

 QT       += concurrent

예제에서 볼 수 있듯이 Worker쓰레드를 만들거나 Qthread를 생성할 필요없이 단지 할 일은 적절한 매개변수 전달과 실행될 함수를 정의하는 것이다. 예제에서 QtConcurrent의 아래와 같은 API들을 사용했다.


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

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

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


그러면 MapReduce는 무엇인가.

MapReduce는 구글에서 대용량 인터넷 데이터를 처리하기 위해 고안했으며, 분산파일시스템에서 데이터의 병렬처리를 가능하게 한다.

QtConcurrent은 이러한 병렬 목록 처리를 위한 방법들을 제공하는 것이다.


QtConcurrent 및 MapReduce의 좀더 자세한 내용은 해당사이트를 참고하기 바란다.

http://doc.qt.io/qt-5/qtconcurrent-index.html


번호 제목 글쓴이 날짜 조회 수
25 Qml 및 C++개발시 유용한 팁 makersweb 2018.04.06 26
24 Qt Version확인 방법 makersweb 2018.03.29 37
23 초보자를 위한 첫번째 프로젝트 QML을 통한 Hello World file makersweb 2018.03.16 56
22 Windows에서 라즈베리파이3 Qt 어플리케이션 개발 및 원격 실행 file makersweb 2018.02.23 174
21 Windows에서 라즈베리파이3용 Qt5.10.0 크로스컴파일 file makersweb 2018.02.23 249
20 Windows환경에서 mingw로 Qt 5.10 정적(static)빌드 file makersweb 2018.02.01 237
19 다국어 지원 어플리케이션 개발 file makersweb 2018.01.27 73
18 Qt 어플리에이션 전역에 폰트 설정 makersweb 2018.01.24 97
17 Qt 3D Studio 시작하기 file makersweb 2018.01.11 87
16 QPA 플러그인과 HTML5 Backend file makersweb 2017.12.27 26
15 임의의 메모리 영역(QImage)에 QPainter를 이용하여 그리기 makersweb 2017.12.19 62
14 QML에서 undefined를 확인하는 방법 makersweb 2017.11.29 77
13 QPA 플러그인과 EGLFS file makersweb 2017.11.21 181
12 타임스탬프( timestamp) 유닉스 시간 makersweb 2017.10.19 120
11 Qt Logging Rule, Qt 프레임워크 로그 출력 makersweb 2017.01.13 1485
10 QString 문자열에서 숫자만 추출해서 QString으로 반환 makersweb 2017.01.10 1444
9 멀티 스레드환경, 스레드에 안전한 이벤트처리 makersweb 2016.10.27 2437
8 Ubuntu Linux에서 Qt Creator 설치 file makersweb 2016.03.06 5482
» QtConcurrent를 이용하여 쓰레드를 만드는 방법과 MapReduce makersweb 2016.01.24 4519
6 Qt 프로그래밍의 시작 makersweb 2015.10.25 5062