thread->Terminate(); 하면 그냥 쓰레드가 스스로 종료하도록
TThread의 멤버 변수를 true시켜줄 뿐입니다.
TThread에서는 그 멤버변수를 보고 알아서 종료해야죠
만약 Thread를 일시정지 시켰다가 다시 동작시키려면
Thread->Suspend();
Thread->Resume(); 같은 함수를 이용하면 될것입니다.
그리고
Thread의 Terminated프로퍼티는 protected입니다.
기본적으로는 다른 class나 밖에서 다음과 같이 수정할수 없습니다.
thread1->Terminated = false;
TThread를 수정하여 저렇게 만든다면...
스스로 종료하기 전에 다시 Terminated변수를 false시키면
종료되진 않겟죠
하지만 이런식으로 코딩하는것을 본적이 없네요
그럼..
정민채 님이 쓰신 글 :
: 쓰레드를 대기 상태로 만드는건가요?
: 그렇다면.. 다시 실행하게 할려면..
: 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값이 들어있군요 ㅠㅠ;
: : : 아!!! 이론상 완벽할듯 한데 ㅠㅠ;; 역시 내공이 부족하여 ㅠㅠ;
: : : 답변 꼭좀 부탁드려요 ㅠㅠ;;; 추천하시는 방법이라던지 ㅠㅠ;
: : : 지푸라기라도 잡고 싶은 심정입니다 ㅠㅠ;;