루프안에 Application->ProcessMessage() 를 사용해서 처리하는 것이
제일 간단한 방법일 것 같습니다.
void __fastcall TForm1::LOOP()
{
while(true)
{
if(m_UserStop == true) break ;
Sleep(100) ;
Application->ProcessMessage(); // 추가
}
}
김시환 님이 쓰신 글 :
: Indy TCP Server 를 사용하여 프로그램을 하고 있습니다.
: 외부 클라이언트에서 특정한 동작 요청이 있을 경우 서버 프로그램은 무한 루프 함수를 실행하게 됩니다.
:
: 그런데 이렇게 될 경우 이 서버가 다른 클라이언트 요청은 정상적으로 수행하는데 이 무한루프 함수를 요청한 클라이언트의 다른 요청은 이 무한루프를 빠져 나가기 전에는 수행을 못합니다.
:
: 아래 코드의 상황 입니다.
:
: void __fastcall TForm1::TCPServerExecute(TIdContext *AContext)
: {
: TIdBytes ABuffer;
: AContext->Connection->IOHandler->ReadBytes(ABuffer, -1, false);
: int action = Parsing(ABuffer) ;
:
: if( action == 1) LOOP() ;
: }
:
: void __fastcall TForm1::LOOP()
: {
: while(true)
: {
: if(m_UserStop == true) break ;
: Sleep(100) ;
: }
: }
:
: 결국 클라이언트의 요청이 완전히 동작 완료하기 전에는 동일한 클라이언트의 다른 요청에는 응답을 하지 못한다는 의미인데 이런경우 어떻게 해결하는 것이 좋을까요??
: Callback 같은 걸로 해결하는 방법이 있을까요?
|