|
RS232C통신 프로그램을 작성하고 있습니다. CPort를 이용하여 작성하고 있는데...RS232C라는 쓰레드 내부에서 데이터를 처리하는데요...이 쓰레드를 Suspend시키면 그림과 같은 에러가 발생해요.. ComPort 내부의 ClearCommError함수가 Fail이라는데.....이 에러 어떻게 잡아야 할까요..
제가 쓰레드를 세웠다가..다시 Resume시키는 곳의 소스를 첨부해봅니다. 엑션 리스트의 _Resume_SuspendExecute를 누를때마다 토글식으로 쓰레드를 세웠다가 다시 누르면 동작시키고 다시 누르면 세우고 하려고 하는데 ...세우는 과정에서 쓰레드를 세우고 싶은데...Suspend를 하면 에러가 발생하고...그래서 지웠다가 다시 생성해봐도 마찬가지고..CPort내부의 버퍼를 클리어 해야하는건가요?...
// Message 창을 띄우기 위한 엑션
void __fastcall TMainForm::_Resume_SuspandExecute(TObject *Sender)
{
TStringList *Message = new TStringList;
if(Connect_ComPort)
{
Resume_Suspend->Caption = "Resume";
Resume_Suspend->ImageIndex = 28;
Message->Add("통신포트 재설정을 위하여 잠시 포트를 닫습니다.");
Message->Add("다시 시작하기 위해서는 설정 후 Resume 탭을 실행하여 주십시오");
ComPort1->ClearBuffer(true, true);
ComPort1->Close();
ComPort1->Connected = false;
Connect_ComPort = false;
// RS232C_S->Terminate();
// delete RS232C_S;
}else {
// RS232C_S = new TRS232C_Thread(false);
Resume_Suspend->Caption = "Suspend";
Resume_Suspend->ImageIndex = 29;
Message->Add("재설정된 설정값으로 통신포트를 가동합니다.");
ComPort1->TriggersOnRxChar = true;
ComPort1->Connected = true;
ComPort1->Open();
Connect_ComPort = true;
// RS232C_S->Resume();
}
EvtShowMessage(Message);
delete Message;
}
//----------------------------------------------------------------------------
|