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
[71507] IdTCPServer 에서 데이터 수신중 IdThread 안에 무한루프에 빠짐
대마두 [daemadoo] 3351 읽음    2014-07-02 10:19
안녕하세요.

외부에 있는 장비에서 IdTCPServer를 통해서 데이터를 받아 모니터링 하고 파일에 기록하는 작업을 하고 있습니다

void __fastcall TfrmMain::IdTCPServer1Execute(TIdContext *AContext)
{	
	if (OverlapExcuteDetect) return;  /**** 중복 실행 방지 ****/
	OverlapExcuteDetect = true;
	::CoInitialize( NULL );

	int recievedSize, sendSize, seqnum; /**** 사용 변수 선언 ****/
	TIdBytes idbuf;
	unsigned char buf[2048], sendbuf[2048];
	FILE *fp;
	bool crcOK;
	unsigned short crc;
	int datetime[6];
	AnsiString date;

	recievedSize = AContext->Connection->IOHandler->InputBuffer->Size;

	if (recievedSize >= 1)	{
		try {
			/**** 받는 부분 ****/
			AContext->Connection->IOHandler->ReadBytes(idbuf,recievedSize,false);
			memset(&buf, 0, sizeof(buf));
			BytesToRaw(idbuf, buf, recievedSize);
                        
			/**** 데이터 가공 및 ACK 전송 ****/
			.......
		}
		catch (...) {
			return;
		}
	}

	::CoUninitialize();
	OverlapExcuteDetect = false;
}

이런식으로 프로그램이 짜여져 있습니다.

그런데 excute이벤트가 발생하여 이 함수가 실행된 후 프로그램이 다음 excute이벤트 발생하기 전까지 프로그램이 반응을 안하네요.

완전히 프로그램이 멈추는 것은 아니고 다음 이벤트 발생하기 전까지 아무 반응을 안하다가 다음 excute이벤트 발생시 지금까지 입력받은 모든 동작을 처리 하면서(예를 들어 이전에 눌렀던 버튼이 이때 동작한다던가, 창을 이동하면 이동안하고 있다가 이벤트 발생시 이동한다던가) 이벤트가 실행되네여.

그래서 브레이크를 찍고 따라가 보니...

IdThread 에서 무한 루프 안에서 계속 돌더라구요... ㅡㅜ

이거 무슨 문제인지 그리고 해결방법을 아시는 분 좀 알려 주시겠어요?


+ -

관련 글 리스트
71507 IdTCPServer 에서 데이터 수신중 IdThread 안에 무한루프에 빠짐 대마두 3351 2014/07/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.