C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[71516] Re:[질문] 스레드의 동작 상태 알아내는 방법.. (동작 중 또는 TEvent등에 의해 Waiting 되는 지)
영악한녀석 [akrnldytpq] 3384 읽음    2014-07-07 15:23

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 
: }
: 

+ -

관련 글 리스트
71505 [질문] 스레드의 동작 상태 알아내는 방법.. (동작 중 또는 TEvent등에 의해 Waiting 되는 지) 땅주인 3340 2014/07/01
71516     Re:[질문] 스레드의 동작 상태 알아내는 방법.. (동작 중 또는 TEvent등에 의해 Waiting 되는 지) 영악한녀석 3384 2014/07/07
71519         Thanks.. 땅주인 2996 2014/07/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.