728x90
기본적으로 QTimer를 만들고 timeout Singal을 connect 해준다면 Main Thread에서 Slot이 처리됩니다. 이럴 때 QThread를 생성 후 Timer를 그 쓰레드로 이동시켜 사용한다면 Main Thread가 아닌 생성한 Thread에서 처리가 됩니다.
class timerMgr : public QObject {
Q_OBJECT
public:
timerMgr() {
for ( int i=0; i < 3 ; i++ ) {
QTimer* t = new QTimer;
t->setObjectName("Timer" + QString::number(i));
t->setInterval(QRandomGenerator::global()->bounded(100, 2000));
connect ( t, &QTimer::timeout, this, &timerMgr::printTimer);
timerList.append(t);
} // 랜덤 주기의 Timer를 생성하고 Connect
}
void startTimer() {
for ( auto t : timerList ) {
t->start();
}
}
private slots:
void printTimer() {
qDebug() << "Timeout Thread = " << QThread::currentThreadId();
} // Thread ID 출력
private:
QList<QTimer*> timerList;
};
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() << "Main Thread = " << QThread::currentThreadId();
QThread* TimerThread = new QThread; // Thread 생성
timerMgr* t = new timerMgr;
t->moveToThread(TimerThread); // Timer Manager 클래스를 TimerThread에서 돌게
TimerThread->start(); // Timer Thread Start
t->startTimer();
}
MainWindow::~MainWindow()
{
delete ui;
}
위 코드를 실행하면 아래와 같이 Timeout에 대한 Slot 함수가 다른 Thread에서 발생했다는 것을 볼 수 있습니다.
더보기
실행결과
Main Thread = 0x52f8
Timeout Thread = 0x638c
Timeout Thread = 0x638c
Timeout Thread = 0x638c
Timeout Thread = 0x638c
Timeout Thread = 0x638c
Timeout Thread = 0x638c
Timeout Thread = 0x638c
Timeout Thread = 0x638c
728x90
'Programming > Qt' 카테고리의 다른 글
[Qt] QtConcurrent mappedReduced 사용하기 (0) | 2024.11.08 |
---|---|
[Qt] QTreeWiget Data Json 형태로 Save/Load 하는 방법 (0) | 2024.11.06 |
[Qt] QTableWidget header 정보는 남기고 내용만 지우기 (0) | 2024.07.18 |
[Qt] Qt + PCAN API를 이용한 CAN Chat 프로그램 (0) | 2024.07.18 |
[Qt] QString::toInt 주의사항 (0) | 2024.06.24 |