쓰레드를 대기 상태로 만드는건가요?
그렇다면.. 다시 실행하게 할려면..
thread1->Terminated = false;
thread2->Terminated = false;
상태로 만들면 다시 돌아갈려나요?? ㅡ0ㅡ?
장성호 님이 쓰신 글 :
:
: thread1.execute()
: {
: while(1)
: {
: 회선 점검용 데이터 전송...
: if(서버가 응답이 없을때)
: {
: closesocket(소켓);
: thread2->Terminate();
: return;
: }
: }
: }
:
: thread2.execute()
: {
: while(1)
: {
: 데이터 처리..
: }
: }
:
:
: 위와같이 하면 안됩니다.
:
: TThread의 Terminate함수는 단지 TThread의 bool형 멤버필드인 FTerminated 를 true로 바꿔줄뿐입니다.
:
:
: thread1.execute()
: {
: while(! this->Terminated) //이렇게 해야..
: {
: 회선 점검용 데이터 전송...
: if(서버가 응답이 없을때)
: {
: closesocket(소켓);
: thread2->Terminate();
: return;
: }
: }
: }
:
: thread2.execute()
: {
: while(! this->Terminated) //이렇게 해야..
: {
: 데이터 처리..
: }
: }
:
:
: 위와같이 Terminated 필드가 true가 아닐때만 while문을 돌려야 합니다.
: 그것이 아니라면 win32 api를 써서 강제로 Thread를 terminated할수는 있지만...
: 문제가 발생할 가능성이 여러가지가 있으니..
:
: 위와같이 해서 쓰레스 스스로 알아서 terminated되도록하는것이 정석입니다.
:
: 그럼..
:
:
: 정민채 님이 쓰신 글 :
: : 아.. 무쟈게 고생하고 있습니다 ㅠㅠ;
: : 이렇게 하면 될듯도 하지만 도무지 되지가 않는군요
: :
: : TCP client 를 만들고 있습니다.
: : thread1 : 회선 점검용 쓰레드
: : thread2 : 회선 점검 이외의 데이터 처리 쓰레드
: :
: : main()
: : {
: : if(TCPopen())
: : {
: : thread1 생성;
: : thread2 생성;
: :
: : while(flag){}
: : }
: : }
: :
: : thread1.execute()
: : {
: : while(1)
: : {
: : 회선 점검용 데이터 전송...
: : if(서버가 응답이 없을때)
: : {
: : closesocket(소켓);
: : thread2->Terminate();
: : return;
: : }
: : }
: : }
: :
: : thread2.execute()
: : {
: : while(1)
: : {
: : 데이터 처리..
: : }
: : }
: :
: : 위와 같이 구성했는데요.. 문제는 서버를 죽였다가 살리면...
: : thread1, thread2에 ID값이 NULL 이여야 다시 생성하고 동작할텐데.
: : 쓰레드에 ID값이 들어있군요 ㅠㅠ;
: : 아!!! 이론상 완벽할듯 한데 ㅠㅠ;; 역시 내공이 부족하여 ㅠㅠ;
: : 답변 꼭좀 부탁드려요 ㅠㅠ;;; 추천하시는 방법이라던지 ㅠㅠ;
: : 지푸라기라도 잡고 싶은 심정입니다 ㅠㅠ;;