2013-06-23 8 views
2

클라이언트를 청취하고 필요한 것을 수행하는 콘솔 서버가 있습니다. 그러나 때로는 최종 서버가 필요하고 어떻게 제대로 할 수 있는지 알지 못합니다. 왜냐하면 나는 프로그램을 끝내기 위해 Ctrl + C를 칠 수 있기 때문에, 나는해야 할 루프 이후에 중요한 코드를 가지고있다.콘솔에서 무한 루프가 끊어졌습니다.

main_function(){ 
    while(true){ 
     listen(); 
    } 
    do_something_important(); 
} 

콘솔에서 신호를 잡아 내고 중요한 기능을 수행하고 제대로 종료 할 수 있습니까?

end_program(){ 
    do_something_important(); 
    return 0; 
} 

또는 내 상황에서 내가 할 수있는 최선의 방법은 무엇입니까?

+0

가능한 복제본 [C++ 콘솔 응용 프로그램을 닫으면 어떻게됩니까?] (http://stackoverflow.com/questions/696117/what-happens-when-you-close-ac-console-application) – GSerg

+0

가능한 복제본 [명령 줄 인터페이스에서 ctrl-break 신호를 처리하는 방법] (http://stackoverflow.com/q/181413/11683) – GSerg

답변

3

당신은 신호를 사용할 수 있습니다 Pragmateek 설명처럼

#include <signal.h> 
#include <stdio.h> 
#include <stdlib.h> 

static void on_close(int signal) 
{ 
    puts("Cleaning up..."); 
    exit(EXIT_SUCCESS); 
} 

int main(void) 
{ 
    signal(SIGINT, on_close); 

    while (1) 
    { 
    } 

    return EXIT_SUCCESS; 
} 
4

를 사용하여 신호를하지만, 확인 만 (exitnow 같은 = TRUE) 사용자의 신호 처리기에서 플래그를 설정하고, 메인 루프에서이 플래그를 확인 . 신호가 코드의 어느 지점에서든 주 프로그램을 방해 할 수 있으므로 논리가 임의로 중단되거나 짧아지지 않도록하려면 신호 처리기를 사용하여 플래그를 설정하십시오.

+1

모범 사례를 위해 +1 주 루프가 고정 된 경우 카운터를 추가 할 수도 있습니다 사용자가 3 번 말을 끝내라고 요청하면 직접 종료됩니다. – Pragmateek

관련 문제