QT - 스레드 뮤텍스
뮤텍스(Mutex)뮤텍스는 상호 배제(Mutual Exclusion)의 약자로 락(Lock)이라고도 한다.이는 여러 쓰레드를 실행하는 환경에서 자원에 대한 접근 제한을 위한 동기화 메커니즘이다.상호 배제 동시성 제어 정책(Mutual Exclusion Concurrency Control Policy)를 시행하도록 설계되었으며 가능한 다양한 방법을 통해 여러 고유한 구현이 존재한다 쉽게 말하자면 멀티스레딩 한경에서 공유 자원에 대한 접근을 조율하기 위해 사용되는 동기화 기법이다. 특징상호배제뮤텍스는 한 번에 하나의 스레드만이 공유 자원에 접근할 수 있도록 보장한다.이를 통해 데이터의 일관성을 유지하고 경쟁상태(Race Condition)을 방지할 수 있다.잠금과 해제잠금(Lock): 스레드가 공유 자원에 ..
2024.07.25
QT - 스레드 동기화(Thread Synchronization)
서론스레드 동기화는 여러 스레드가 동시에 접근할 수 있는 공유 자원에 대한 접근을 조절하여 데이터의 일관성을 유지하고경합 조건(Race Condition)을 방지하는 기술이다.동기화를 하지 않으면 여러 스레드가 동시에 같은 자원에 접근하여 예기치 않은 결과를 초래할 수 있다.주요 개념임계 구역(Critical Section)여러 스레드가 동시에 접근하면 안되는 코드 블럭이다. 이 구역에서는 공유 자원에 대한 읽기 또는 쓰기가 수행된다. 경합 조건(Race Condition)두 개 이상의 스레드가 동시에 임계 구역을 실행할 때 발생하는 문제로, 데이터의 일관성이 깨지는 현상이다. 원자성(Atomicity)더 이상 쪼갤 수 없는 작업 단위로, 다른 스레드가 끼어들 수 없는 연산을 말한다.동기화 방법뮤텍스(M..
2024.07.24
no image
QT - Thread (3) 2개의 클래스 객체를 스레드로 실행시키기
서론MainWindow에서 2개의 객체를 동시에 실행시켜보자.흐름도 1. 클래스간의 헤더 파일에서 slots 함수와 signal을 선언 및 cpp파일에서 slots 함수 구현을 해준다. - 슬롯 함수void Custom::doWork(){ for(int i=0; i 2. mainwindow.cpp 파일에서 signal과 slots 함수를 연결해준다. worker->moveToThread(workerThread); custom->moveToThread(customThread); connect(workerThread, SIGNAL(started()), worker, SLOT(doWork())); connect(customThread, SIGNAL(started()), custom,..
2024.07.24
no image
QT - Thread (2) [공식문서를 살펴보자]
서론 QT에서의 Thread를 공식문서와 함께 알아보자https://doc.qt.io/qt-6/qthread.html#protected-functions QThread Class | Qt Core 6.7.2 doc.qt.ioPublic Function반환형메서드설명 QThread(QObject *parent = nullptr)QThread 객체를 생성, 선택적으로 부모 QObject 설정가능virtual~QThread()QThread 객체를 소멸, 소멸자가 호출될 때 스레드가 종료되지 않았으면 스레드를 종료QAbstractEventDispatcher *eventDispatcher() const현재 스레드의 이벤트 디스패처를 반환이벤트 디스패처는 이벤트 루프에서 이벤트를 처리하는 역할을 한다.boolisF..
2024.07.22
Qt - Thread(1)
Thread란 무엇인가스레드는 프로그램에서 가장 작은 실행 단위로, 컴퓨터가 명령어를 수행하는 순서를 결정한다.한 프로그램 내에서 동시에 여러 작업을 수행하게 만드는 역할을 한다. 프로세스 내에서 실행되는 각 스레드는 자신만의 레지스터 세트와 프로그램 카운터를 가지지만, 같은 포르세스 내의 다른 스레드와 힙 메모리, 전역 변수 등을 공유한다. 스레드는 프로세스보다 더 적은 리소스를 사용하여 생성하거나 제거할 수 있기 때문에, 동일한 프로세스 내에서 다양한 태스크를 빠르게 전환할 수 있다. 이는 사용자 인터페이스가 있는 응용 프로그램에서 중요한데, 이런 프로그램에서는 작업을 동시에 처맇거나, 한 작업이 완료될 동안 다른 작업을 계속 진행해야 할 때가 많다.  #include #include void fun..
2024.07.22
no image
QT project - 메모장 구현하기
서론윈도우에서 제공하는 메모장처럼 새로열기, 열기, 저장 기능을 만들어보자 메뉴바 구현메뉴바를 구현하기 위해서는 3가지가 필요하다.1. 메뉴바2. 메뉴바 위에 올릴 메뉴들3. 메뉴를 누르면 실행할 액션들따라서 QMenuBar, QMenu, QAcion들을 헤더파일에 포함시키면 된다. notepad.h#ifndef NOTEPAD_H#define NOTEPAD_H#include #include #include #include #include #include namespace Ui {class Notepad;}class Notepad : public QDialog{ Q_OBJECTpublic: explicit Notepad(QWidget *parent = nullptr); ~Notepad();..
2024.07.19
QT - QFileDialog 사용해보기
QFileDialog디렉토리 or 파일을 선택하는 GUI 인터페이스를 제공한다. QFileDialog::getExistingDirectoryQString QFileDialog::getExistingDirectory( QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = QFileDialog::ShowDirsOnly)사용자가 디렉터리를 선택하도록 하는 파일 대화 상자를 연다.매개변수parent: 파일 대화 상자의 부모 위젯caption: 파일 대화 상자의 제목dir: 파일 대화 상자가 처음 열릴 때 표시할 디렉토리 ..
2024.07.19
no image
QT project - 타이머 구현하기
서론 타이머 UI이다.시 분 초를 설정할 수 있으며 START, STOP, RESET 버튼을 만들었다.시간이 종료되면 QMessageBox가 출력되는 프로그램을 만들어 보자.코드timer.h#ifndef TIMER_H#define TIMER_H#include #include namespace Ui {class Timer;}class Timer : public QDialog{ Q_OBJECTpublic: explicit Timer(QWidget *parent = nullptr); ~Timer();private: Ui::Timer *ui; QTimer *timer; int totalSeconds = 0;private slots: void btn_start(); vo..
2024.07.17