[질문] 쓰레드 생성하여 scanf실행시
글쓴이: stypr / 작성시간: 화, 2004/02/03 - 3:21오후
#include <pthread.h> #include <stdio.h> void serveIt1(); void serveIt2(); int main() { pthread_t tid; if ( pthread_create(&tid, NULL, (void*) &serveIt2, NULL) ) { printf("error creating thread."); } if ( pthread_create(&tid, NULL, (void*) &serveIt1, NULL) ) { printf("error creating thread."); } } void serveIt1() { printf("aaaa"); } void serveIt2() { char buf[100]; scanf("%s", buf); }
scanf 가 먹히질 않네요..
사실은 저 소스는 테스트 용이구요
void serveIt2() 이 함수 안에 소켓으로 Server를 만들어 기다리게 하는데
accept 함수에서 -_- 그냥 프로그램 끝나버리더라구요.
계속 대기 하고 있어야 하는데..
ㅇ ㅔㅎ ㅕ~! ...
좋은 답변 부탁 드립니다. 수고하세욥.
Forums:
리턴값과 errno를 먼저 확인해보세요.
쓰레드와는 관계없는 문제일수도 있습니다. 실제 코드도 아닌 상태에서 정확한 판단을 해낸다는건 불가능에 가깝구요.
아주 특별한 방법을 사용하지 않았다면 accept는 blocking 함수입니다. 쓰레드가 멈춰야되는데 바로 끝난다는건 accept가 error를 리턴했다는 겁니다. 리턴값과 errno를 먼저 확인해보세요.
산넘어 산
훔..
에러값은 다 체크 해봤습니다.
그리고 저 소스 또한 똑같은 현상을 나타냅니다.
실행 해보면 똑같은 현상을 ..... -_-
어디서 문제가 ㅠ.ㅠ.ㅠ.ㅠ.ㅠ.
위의 소스라면..
메인 쓰레드가 쓰레드 두개 만들고 그냥 종료되버리니 당연히 자식 쓰레드도 정리되고 끝나죠.
if () 두개 실행하고 그냥 끝나자나요. scanf로 대기를 하더라도 메인 쓰레드가 종료되면 끝입니다. 저위 코드대로라면 그렇네요.
산넘어 산
감사 감사
아그렇네요 -_-; 왜 그걸 못봤을까요.. 감사합니다... ㅠ.ㅠ 감격..
그럼 쓰레드들이 다 끝난다음에 끝나게 할려면 어케 해야 할지..
끝내는 처리는 main에서 해야 하거든요..
어떻게 생성된 쓰레드들이 죽었는지 체크를 할지...
pthread_join 을 쓰시져~
pthread_join ( tid, NULL );
라고 thread 생성시킨후 main()에 넣어두시죠.
그리고 thead id는 각각 만드는게 좋지 않을까요?
handle인데요..
---------------------------------------------------------------
pthread_t tid1;
pthread_t tid2;
if ( pthread_create(&tid1, NULL, (void*) &serveIt2, NULL) ) {
printf("error creating thread.");
}
if ( pthread_create(&tid2, NULL, (void*) &serveIt1, NULL) ) {
printf("error creating thread.");
}
}
pthread_join ( tid1, NULL );
pthread_join ( tid2, NULL );
Be Postive!
아래는 joinc.co.kr에서 퍼온내용입니다.pthread_jo
아래는 joinc.co.kr에서 퍼온내용입니다.
pthread_join 을 이용하시면 정상종료처리가 가능합니다.
#include <pthread.h>
int pthread_join(pthread_t th, void **thread_return);
첫번째 아규먼트 th는 기다릴(join)할 쓰레드 식별자이며, 두번째 아규먼트 thread_return은 쓰레드의 리턴(return) 값이다. thread_return 이 NULL 이 아닐경우 해다 포인터로 쓰레드 리턴 값을 받아올수 있다.
pthread_joinc.c
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
// 쓰레드 함수
// 1초를 기다린후 아규먼트^2 을 리턴한다.
void *t_function(void *data)
{
int num = *((int *)data);
printf("num %d\n", num);
sleep(1);
return (void *)(num*num);
}
int main()
{
pthread_t p_thread;
int thr_id;
int status;
int a = 100;
thr_id = pthread_create(&p_thread, NULL, t_function, (void *)&a);
if (thr_id < 0)
{
perror("thread create error : ");
exit(0);
}
// 쓰레드 식별자 p_thread 가 종료되길 기다렸다가
// 종료리턴값을 가져온다.
pthread_join(p_thread, (void *)&status);
printf("thread join : %d\n", status);
return 0;
}
아지랑이류 초환상 공콤 화랑... 포기하다.. T.T
댓글 달기