2013-01-19 2 views
1

가능한 복제를를 법원 :
Why does my cout output not appear immediately?중공업 메소드 호출 블록

나는 매우 무거운 방법 (숫자가 소수 인 경우는 검사 - 오일러 3)이있는 블록 cout을.
어떻게 가능합니까?

[Session started at 2013-01-19 13:50:12 +0100.] 
----------------------------------------------------------- 
isPrime(3): false 
isPrime(10): false 

을 한 후 (몇 분) 중지 : 그것은 출력이 같이

int main(int argc, char * argv[]) { 
    cout << "-----------------------------------------------------------" << endl; 
    cout << "isPrime(3): " << ((isPrime(3)) ? "true" : "false") << endl; 
    cout << "isPrime(10): " << (isPrime(10) ? "true" : "false") << endl; 
    cout << "BLAH"; 
    cout << "BLAH"; 
    cout << "BLAH"; 
    cout << "BLAH"; 
    cout << "BLAH"; 
    cout << "BLAH"; 
    cout << "isPrime(600851475143): " << (isPrime(600851475143.0) ? "true" : "false") << endl; // This one takes very long to complete 
    cout << "-----------------------------------------------------------"; 
} 

: 이것은 내 코드입니다. (isPrime()이 고장났습니다.) isPrime(600851475143)으로 줄을 주석 처리하면 주석 처리 된 줄의 출력을 제외한 모든 것을 outpus보다 1 초 이내에 출력합니다.

매우 무거운 메소드 호출로 이미 작성된 출력을 블록 cout에 어떻게 차단할 수 있습니까?

+0

'isPrime' 함수에 문제가있을 수 있습니다. 예를 들어 루프에서 멈출 수 있습니다. – sgarizvi

+0

아니요, 숫자는 매우 큽니다 (논리가 깨져서 너무 오래 실행됩니다). 나는 그것을 완료하기 위해 몇 번 기다렸다. @ sgar91 – 11684

+1

@ RaymondChen 어떻게 찾았습니까? – 11684

답변

5

은 일반적으로 라인 버퍼 된 표준 출력에 씁니다. 즉, 버퍼가 개행 문자 또는 endl을 만나거나, 명시 적으로 cout.flush()을 호출 할 때만 콘솔로 플러시됩니다.

+0

감사합니다. 12 분 안에 답을 수락합니다! – 11684

0

스트림은 출력을 버퍼링하고 줄 바꿈 문자를 볼 때만 콘솔에 씁니다.

1

cout.flush(); 또는 cout << endl;을 사용하는 경우 플러시 시점까지 보류중인 출력이 인쇄됩니다.

이것은 cout이 I/O 호출을 효율적으로 사용하기 때문에 발생합니다. 모든 코드가 하나의 스레드에서 실행되기 때문에 시간 초과 또는 무언가를 추가 할 수있는 방법이 없으므로 몇 분이 걸리는 호출이 있으면 출력이 처리되지 않습니다.