2013-04-10 1 views
3

pthread_create으로 스레드를 만들고 있습니다. 스레드 함수 내부 fprintf가 스레드에서 작동하지 않는 이유는 무엇입니까?

은 내가

fprintf(stdout, "text\n"); 

사용하지만이 콘솔에 아무것도 출력하지 않습니다. 동일한 문제는 printf입니다. 나는 또한 어떤 성공없이 stdout 버퍼를 플러시하려고했습니다. 그래서 문제는 스레드에서 콘솔에 무엇을 인쇄하는 것입니까?

는 UPD : 주에서

void *listen_t(void *arg){ 
    fprintf(stdout, "test\n"); 
    fflush(stdout); 
} 

int main(int argc, char **argv){ 
    pthread_t tid; 
    int err; 

    err = pthread_create(&tid, NULL, &listen_t, &thread_params); 
    if (err != 0){ 
    printf("\ncan't create thread :[%s]", strerror(err)); 
    } 
    else{ 
    printf("\n Thread created successfully\n"); 
    } 
    return 0; 
} 

코드는 잘 작동합니다. 하지만 스레드가 아무 것도 출력하지 않습니다

+0

우리에게 문제를 입증 할 수있는 최소한의 완벽한 예를 제시해주십시오. – NPE

+0

스레드가 분리되어 실행 중입니까? 그렇다면 STDOUT이 없습니다. –

+0

스레드에'stdout'을 어떻게 전달합니까? – dasblinkenlight

답변

4

pthread_join의 전화가 누락되었습니다 : printf의 출력이 콘솔에 도착하기 전에 주 프로그램이 종료되면 아무것도 표시되지 않습니다. 귀하의 예에 pthread_join(tid, NULL); 추가

출력을 해결

#include <pthread.h> 
#include <stdio.h> 

void *listen_t(void *arg){ 
    fprintf(stdout, "test\n"); 
    fflush(stdout); 
} 

int main(int argc, char **argv){ 
    pthread_t tid; 
    int err; 

    err = pthread_create(&tid, NULL, &listen_t, NULL); 
    if (err != 0){ 
    printf("\ncan't create thread :[%d]", strerror(err)); 
    } 
    else{ 
    printf("\n Thread created successfully\n"); 
    } 
    pthread_join(tid, NULL); 
    return 0; 
} 
+0

예! 그게 효과가 있었어. 감사! – RomanKapitonov

+2

여기에 뮤텍스 잠금을 사용해야하며, 단일 스레드 이상으로 인쇄하려는 경우 콘솔로 인쇄하는 동안 잠글 수 있습니다. – ZarakiKenpachi

+1

@ZarakiKenpachi : stdio에는 내부 잠금 장치가 있습니다. 다른 잠금 장치가 필요 없습니다. –

관련 문제