본문 바로가기

C++

[C++] Simple Thread


- C++에서 멀티스레드를 활용한 간단한 콘솔 프로그램 예제

이번 포스팅에서는 C++에서 멀티스레드를 활용한 간단한 콘솔 프로그램을 작성해보겠습니다. 이 프로그램은 사용자가 Enter 키를 누르면 스레드가 실행되고, ESC 키를 누르면 스레드가 종료되는 기능을 구현합니다.

 


- MyThread 클래스 구현

먼저, MyThread 클래스를 살펴보겠습니다. 이 클래스는 스레드가 실행되는 동안 "Runing..." 메시지를 매초 출력하다가, Stop 메서드가 호출되면 종료됩니다.

// MyThread.h 

#pragma once
#include <iostream>
#include <thread> 
#include <conio.h> // _getch()
using namespace std;

class MyThread
{
public:
	MyThread();
	~MyThread();

public:
	void Update();
	void Stop();

private:
	bool Runing;
	
};
// Mythread.cpp
#include "MyThread.h"

MyThread::MyThread()
{
	Runing = true;
}

MyThread::~MyThread()
{
}

void MyThread::Update()
{
	while (Runing)
	{
		cout << "Runing . . ." << endl;
		this_thread::sleep_for(chrono::milliseconds(1000)); // Run delay
	}
}

void MyThread::Stop()
{
	cout << "Thread process Exit" << endl;
	Runing = false;
}

- main 함수 구현

이제 main 함수에서 MyThread 클래스를 활용하여 스레드를 제어하는 로직을 작성해보겠습니다.

// main.cpp

#include "MyThread.h"

int main()
{
    MyThread* mythread = new MyThread();

    cout << "Start \"Enter\" Key" << endl;

    cout << "Stop \"Esc\" Key" << endl;

    while (_getch() != 13); // Enter key

    thread loopThread([&mythread] {
        mythread->Update();
        });

    while (_getch() != 27); // ESC key

    mythread->Stop();

    loopThread.join();

    delete mythread;

    cout << "main process Exit" << endl;
    return 0;
}

 

 

  • 프로그램이 시작되면, 먼저 사용자가 Enter 키를 누를 때까지 대기합니다.
  • Enter 키를 누르면 Update 메서드를 실행하는 스레드가 시작됩니다.
  • 사용자가 ESC 키를 누를 때까지 스레드는 계속 실행되며, ESC 키가 입력되면 스레드가 종료됩니다.
  • 스레드가 종료되면 메모리 관리를 위해 mythread 객체를 삭제합니다.

 

Github

https://github.com/Jedragon-e/ThreadDemo

 

GitHub - Jedragon-e/ThreadDemo

Contribute to Jedragon-e/ThreadDemo development by creating an account on GitHub.

github.com

 

 

이번 포스팅에서는 C++에서 멀티스레드를 사용하여 간단한 스레드 제어 프로그램을 구현해보았습니다. 이 프로그램은 스레드를 시작하고 종료하는 기본적인 방법을 이해하는 데 도움을 줄 수 있습니다.
std::thread
를 사용하여 멀티스레드를 간단히 구현할 수 있으며, 스레드의 생명 주기를 관리하는 방법을 학습할 수 있습니다. 이 코드를 바탕으로 더 복잡한 스레드 기반 애플리케이션을 개발할 수 있을 것입니다.