영악한녀석 님이 쓰신 글 :
:
: TAThread에 상태 변수를 하나 만드시는게 어떠신지..
:
:
: enum TAThreadStatus { EventWating, Running };
:
: void __fastcall TAThread::Execute()
: {
: TWaitResult Result;
: while ( FormMain->bContinue ) {
: threadStatus = EventWaiting;
: Result = GAEvent->WaitFor(EVENT_WAIT_TIME); // TEvent Object, 1 Second Wait
: threadStatus = Running;
: if ( Result == wrSignaled || Result == wrTimeout ) {
: while ( GAQueu->Count() ) {
: GASection->Enter();
: pMessage = (STMessage *) GAQueue->Pop(); // TQueue
: GASection->Leave();
:
: // do something ..
: // it take 2~3 seconds...
:
: delete pMessage;
: } // end of while
: } else {
: // nothing to do..
: } // end of if
: } // end of while
: }
:
:
:
: 스레드 상태 체크하는 방법이 따로 있었던 것 같습니다.
: 볼랜드포럼에서 찾아본 기억이 있는데 키워드는 가물가물하네요.
: 필요하시면 열정을 다해 한번 찾아보심이...
:
:
: 땅주인 님이 쓰신 글 :
: :
: : 개발환경: C++ Builder XE5
: : Thread를 운영하고 있습니다. TEvent를 통해 Main Thread와 Child Thread간 Event를 전달해 주고,
: : 데이터는 Queue를 이용하여 연동하고 있습니다.
: : Main Thread에서 Queue에 데이터를 넣고, TEvent 객체(GAEvent)에 Signal을 주어 Child Thread가 실행되도록 하였습니다.
: : 그런데, Main Threa에서 Event가 겹칠 경우(즉, Timer와 Socket에서 받은 Event가 거이 동시에 일어나는 경우 등..)
: : 선후를 가려서 나중에 일어나는 Event는 기다리거나 Queue에 넣기만 해야 할 것 같은데,
: : 그래서, Main Thread에서 TEvent로 Signal을 보낼 때 Child Thread 상태를 알았으면 하는데,
: : 즉, TAThread의 상태가 TEvent 객체에서 기다리고 있는 지, 아니면, 다른 Event를 받아 실행 중에 있는 지를
: : 판별하고 싶습니다.
: :
: : 즉, Thread의 상태(동작 중인 지 아니면 TEvent에서 Waiting하고 있는 지를 알 수가 있나요?
: :
: :
: : void __fastcall TAThread::Execute()
: : {
: : TWaitResult Result;
: : while ( FormMain->bContinue ) {
: : Result = GAEvent->WaitFor(EVENT_WAIT_TIME); // TEvent Object, 1 Second Wait
: : if ( Result == wrSignaled || Result == wrTimeout ) {
: : while ( GAQueu->Count() ) {
: : GASection->Enter();
: : pMessage = (STMessage *) GAQueue->Pop(); // TQueue
: : GASection->Leave();
: :
: : // do something ..
: : // it take 2~3 seconds...
: :
: : delete pMessage;
: : } // end of while
: : } else {
: : // nothing to do..
: : } // end of if
: : } // end of while
: : }
: :