2016-10-01 3 views
1

N 초 후에 프로그램이 종료되도록 지정해야합니다. while 루프와 같은 일종의 전체 프로그램을 둘러 쌈을 의미한다고 가정합니다. 그러나 구체적인 내용을 이해할 수는 없습니다. 어떻게이 일을 끝낼 수 있습니까? 아주 간단한 예를 들어 프로그램이 N 초 동안 만 실행되도록하십시오.

, 나는 그것이 3 초 이상 동안 N 초

+0

이 코드에 따라 달라 (큰 I/O 작업이 진행중인 경우 스레드가이 시간에 활성화되지 않기 때문에, 스레드 죽일 시간이 걸릴 수 있습니다). 너를 보여줄 수 있니? –

+1

코드 자체가 중요한 이유는 무엇입니까? N 초 동안 "Hello World"를 인쇄하는 것처럼 간단 할 수 있습니다. – Bob

+0

프로그램이 2Tb 파일을 읽는 경우, 다른 것입니다. –

답변

2

이 바보 같은 코드를 인쇄 안녕하세요 세계를 들어 줄

printf("Hello world\n"); 

를 실행하려면 말할 수

#include <stdio.h> 
#include <time.h> 

int main() 
{ 

    time_t start_timer = time(NULL); 
    while(1) 
    { 
     printf("Hello world\n"); 
     if (time(NULL)-start_timer > 3) 
     { 
      break; 
     } 
    } 
    return 0; 
} 

물론 메시지를 인쇄하는 대신 프로그램이 큰 계산/입력/출력 작업/네트워크 작업을 수행하면 3 초 이상 걸릴 수 있습니다.

그런 경우 해당 주석이 제안했듯이 "보기"스레드를 만들고 계산과 병행하여 시간 경과를 확인하는 것이 더 좋을 수 있지만 (더 복잡하므로 필요합니다) (CPU를 사용하여 - 100 % CPU를 먹는 것을 피하기위한 수동태 대기 메커니즘). 너무 오래 걸리면 계산 스레드를 죽입니다.

+0

이것은 일반적인 패턴이며 보통 너무 긴 시간이 걸리는 경우 주 스레드를 죽일 수있는 별도의 "감시"스레드에 있습니다. 이것은 매우 유용합니다. 때로는 멈출 수있는 기능 테스트. – jforberg

+0

@jforberg 사실. 하지만 워치 독에서는 "잠자기"를 삽입해야하거나 워치 독이 CPU의 100 %를 먹을 수 있습니다. –

+0

예. 하지만 수면은 표준 C가 아니며 "C"태그 아래에 교차 플랫폼이 아닌 솔루션을 제안하면 스택 오버플로가 먹는 경향이 있습니다 ... – jforberg

관련 문제