|
찾아보니 WaitForSingleObject를 쓰면 어떨까해서요..
여기서 를 쓴다고 하면...
void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender,
: TStream *AData, TIdSocketHandle *ABinding)
: {
: if(AData->Size < 3) return;
:
: memset((void *)&TotStack, 0, sizeof(TotStack));
/////////////////////////////여기에 이런식으로 쓰는게 맞는지요... 실력은 없구 맘만 조급하네요 ㅠㅠ
DWORD ret;
while(!Terminated)
{
ret = WaitForSingleObject((HANDLE)ImpThread -> Handle, 1000);
switch(ret)
{
// 커널객체가 시그널되기 전에 주어진 시간초과간격이 모두 지났다.
case WAIT_TIMEOUT :
return;
default :
continue;
}
}
: .
: .
: .
: // 수신 데이터 처리
: CodeDisplay(TotStack, 0);
: ReceiveDataProcess();
:
: // 메시지 처리
: Application->ProcessMessages();
: }
★래미★ 님이 쓰신 글 :
: 안녕하세요~
: 항상 볼랜드포럼에서 도움 받고 있습니다.
:
: IdUDPServer1UDPRead() 함수로 계속 데이터가 들어오는 상태에서
: 종료 버튼을 누를 경우 응용프로그램이 즉시 끝날 수 있게 하고 싶은데요~~
:
: 계속 데이터가 들어오기 때문에 그대로 멈춰있네요ㅠㅠ
: 무한루프나 thread 강제종료 이런걸 찾아봐서 적용해봐두 잘 안되네요.
:
: IdUDPServer1UDPRead 함수입니다..
:
: void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender,
: TStream *AData, TIdSocketHandle *ABinding)
: {
: if(AData->Size < 3) return;
:
: memset((void *)&TotStack, 0, sizeof(TotStack));
: AData->Read(TotStack, AData->Size);
: .
: .
: .
: // 수신 데이터 처리
: CodeDisplay(TotStack, 0);
: ReceiveDataProcess();
:
: // 메시지 처리
: Application->ProcessMessages();
: }
:
:
: 제가 해본 방법은 다음과 같아요.
: 방법이 틀렸는지--; 아님 다른 걸로 IdUDPServer를 종료시켜야 되는건지 알려주세요...
:
: void __fastcall TForm1::BitBtn2Click(TObject *Sender) //종료버튼
: {
: HWND hWnd ;
: HANDLE hdHandle = FindWindow("TForm1", "CNSEM");
: DWORD dwPID;
:
: if(hdHandle)
: {
: GetWindowThreadProcessId(hdHandle, &dwPID);
:
: if(dwPID)
: {
: hWnd = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
: ShowMessage("Close Thread");
: TerminateProcess(hWnd, -1);
: // CloseHandle(hWnd);
: }
:
: Application->ProcessMessages();
: }
:
: Close();
: }
|