한국어
Qt
 

C++ Class QThread 및 QMutex 예제

makersweb 2021.01.12 21:25 조회 수 : 5440

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

#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 116910
140 Qt 5.15 및 Qt 6의 출시 일정 makersweb 2020.04.09 4510
139 QML 전역 객체 (Global Object) file makersweb 2019.04.10 4547
138 Qt 6의 비동기 API makersweb 2020.10.19 4567
137 QML에서 D-Bus 통신 file makersweb 2023.03.15 4575
136 클라우드용 Qt file makersweb 2024.01.16 4618
135 표를 만들고 PDF문서로 출력하기 file makersweb 2018.09.30 4633
134 Visual Studio Code용 Qt 확장팩 file makersweb 2024.10.09 4673
133 QProcess 예제 (프로그램 재시작) file makersweb 2023.01.25 4761
132 qInstallMessageHandler를 이용한 디버그 메세지 출력 제어하기 makersweb 2019.02.25 4783
131 Qt for Embedded Linux 화면출력 makersweb 2019.10.17 4882
130 Qt Quick Controls 2에 네이티브 데스크탑 스타일 추가 file makersweb 2020.11.23 4895
129 Qt로 작성된 iOS 앱에서 시리얼 통신 file makersweb 2022.04.30 4935
128 Qt 하이브리드 애플리케이션(Hybrid App) 개발 file makersweb 2023.02.08 4956
127 2020년에 변경되는 Qt 오퍼 (Qt offering changes 2020) [2] j2doll 2020.01.31 4957
126 Qt로 XML 파싱 : Qt 6에서 업데이트된 (Parsing XML with Qt: Updates for Qt 6) [1] j2doll 2020.01.16 5122
125 MCU용 Qt에 대해서 makersweb 2019.08.22 5140
124 Base64로 인코딩된 파일을 복원 makersweb 2023.08.06 5141
123 Qt Quick 3D 소개 makersweb 2019.11.09 5153
122 컨테이너에 적재된 객체를 편리하게 삭제하기 makersweb 2019.09.18 5155
121 QOpenGLWidget 을 투명하게 적용 file makersweb 2020.02.05 5155