한국어
Qt
 

C++ Class QThread 및 QMutex 예제

makersweb 2021.01.12 21:25 조회 수 : 1351

멀티 스레드에서 공유 리소스에 대한 동시 액세스로 인해 경합이 발생할 수 있다. 다음은 멀티스레드에서 안전하지 않은 전형적인 예를 보여준다. 

#include <QThread>

class Thread : public QThread
{
    bool m_cancel;
public:
    explicit Thread(QObject *parent = nullptr)
        : QThread(parent), m_cancel(false) {}
    
    void cancel() // called by GUI
    {
        m_cancel = true;
    }
    
private:
    bool isCanceled() const // called by run()
    {
        return m_cancel;
    }
    
    void run() override { // reimplemented from QThread
        while (!isCanceled())
            doSomething();
    }
};

 

다음은 QMutex 를 사용하여 스레드를 동기화는 방법을 보여준다.

#include <QThread>

class Thread : public QThread
{
    mutable QMutex m_mutex; // protects m_cancel
    bool m_cancel;
public:
    explicit Thread(QObject *parent = nullptr)
        : QThread(parent), m_cancel(false) {}
    
    void cancel() { // called by GUI
        const QMutexLocker locker(&m_mutex);
        m_cancel = true;
    }
    
private:
    bool isCanceled() const { // called by run()
        const QMutexLocker locker(&m_mutex);
        return m_cancel;
    }
    
    void run() override { // reimplemented from QThread
        while (!isCanceled())
            doSomething();
    }
};

 

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 85943
19 QThread 소개 및 예제 makersweb 2019.12.25 19490
18 Qt애플리케이션 객체(QCoreApplication, QGuiApplication, QApplication) 에 대해서 makersweb 2019.11.11 10111
17 QLabel의 텍스트 색과 배경색을 변경 makersweb 2020.02.25 6622
16 QPushButton 의 커스텀 이미지버튼 file makersweb 2019.11.05 6394
15 QQuickImageProvider 를 이용한 Qml 에서 이미지 표시 makersweb 2015.10.18 5999
14 컨테이너 클래스 - QVector makersweb 2020.03.17 2842
13 main함수 명령줄 옵션 해석 makersweb 2020.09.01 2232
12 Qt로 데이터를 직렬화(serialization)하는 방법 makersweb 2020.08.04 2060
11 QRandomGenerator 클래스를 사용하여 난수(random values) 생성 makersweb 2020.10.17 1571
» QThread 및 QMutex 예제 makersweb 2021.01.12 1351
9 재진입(Reentrancy) 및 스레드 안전성(Thread-Safety) makersweb 2020.04.19 1218
8 Qt 스마트 포인터 (QSharedPointer, QScopedPointer, QPointer) makersweb 2022.08.18 1139
7 QScopedPointer 소개 및 사용법 makersweb 2019.11.29 1027
6 QProcess 예제 (프로그램 재시작) file makersweb 2023.01.25 901
5 응용프로그램 자동실행 설정 (on Windows) makersweb 2021.05.08 564
4 QML의 사용자 정의 Image makersweb 2023.09.17 561
3 하드디스크 드라이브 여유 공간 계산 file makersweb 2023.01.15 513
2 Base64로 인코딩된 파일을 복원 makersweb 2023.08.06 452
1 HTTPS URL을 연결할 때 SslHandshakeFailedError 오류 makersweb 2022.07.31 358