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
[71519] Thanks..
땅주인 [heaven2] 2995 읽음    2014-07-07 16:32
영악한녀석  님이 쓰신 글 :
:
: 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 되는 지) 땅주인 3339 2014/07/01
71516     Re:[질문] 스레드의 동작 상태 알아내는 방법.. (동작 중 또는 TEvent등에 의해 Waiting 되는 지) 영악한녀석 3384 2014/07/07
71519         Thanks.. 땅주인 2995 2014/07/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.