본문 바로가기
카테고리 없음

Windows 앱 작성시, 프로그램 종료를 막는 방법

by 기부전사 2024. 4. 1.

학부생 시절 처음 개발을 하다보면

 

콘솔 어플리케이션 개발시 main() 내에 무한루프를 집어넣고 영원히 종료되지 않는 프로그램들을 작성하게 된다. 

 

하지만 어떤 시스템은 무한 루프에 빠진 어플리케이션을 강제로 종료시킬 수 있다.

 

이는 시스템 자원을 보호하고 다른 어플리케이션이 원활하게 작동할 수 있도록 하기 위함이다.

 

이는 어플리케이션이 의도적으로 설계되었을 수도 있지만, 버그나 오류로 인해 발생할 수도 있기 때문.

 

무한 루프에 빠진 어플리케이션은 CPU, 메모리, 네트워크 등의 시스템 자원을 과도하게 사용하여

 

시스템 전체의 성능을 저하시키고 리소스를 낭비하기 때문에

 

시스템은 무한 루프에 빠진 어플리케이션을 감지하고, 해당 어플리케이션을 강제로 종료시키는 메커니즘을 가지고 있을 수 있다.

 

이를 위해, 시스템은 어플리케이션의 상태를 모니터링하고, 무한 루프에 빠졌다고 판단되면 적절한 조치를 취함.

 

따라서 일반적으로는 malfunction에 빠졌을 때, 최소한 SW의 문제는 아닐 수 있도록 몇가지 우회하는 트릭이 있고

 

아주 기초적인 내용을 포스팅 하고자함.

 

 

#include <iostream>
#include <thread>

// 프로그램 종료를 막기 위한 무한 루프
void preventExit() {
    while (true) {
        // 아무 작업도 수행하지 않음
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

int main() {
    // 프로그램 시작 메시지 출력
    std::cout << "안녕하세요! 프로그램이 시작되었습니다." << std::endl;

    // 프로그램 종료를 막기 위한 스레드 생성
    std::thread exitPreventionThread(preventExit);

    // 사용자 입력 대기
    std::cout << "프로그램을 종료하려면 'q'를 입력하세요: ";
    char userInput;
    std::cin >> userInput;

    // 사용자가 'q'를 입력할 때까지 대기
    while (userInput != 'q') {
        std::cout << "프로그램을 종료하려면 'q'를 입력하세요: ";
        std::cin >> userInput;
    }

    // 스레드 종료
    exitPreventionThread.join();

    // 프로그램 종료 메시지 출력
    std::cout << "프로그램이 종료되었습니다." << std::endl;

    return 0;
}

 

이 코드는 무한 루프를 통해 프로그램을 계속 실행하도록 유지하며, 

 

사용자가 'q’를 입력할 때까지 종료되지 않도록 별도의 thread로 처리한 방식임.

 

필요에 따라 코드를 수정하여 원하는 동작을 구현하시면 됨.

 

std::thread exitPreventionThread(preventExit);

 

 

위 구문은 **C++**에서 스레드를 생성하는 역할. 이 구문은 다음과 같은 작업을 수행 : 

std::thread 객체 exitPreventionThread를 생성.
preventExit 함수를 실행하는 스레드를 exitPreventionThread에 할당.
preventExit 함수는 무한 루프를 통해 프로그램을 계속 실행하도록 유지.

 

이 스레드는 프로그램이 종료되지 않도록 합니다.
즉, exitPreventionThread 스레드는 프로그램이 종료되지 않도록 하며, 

사용자가 'q’를 입력할 때까지 프로그램을 계속 실행. 보통은 이러한 방식으로 특정 어플리케이션의 종료 방법을 만들어 놓아야함.

반응형