|
제가 마이컴을 주로 사용하기 때문에 마이컴 보드 테스트용 프로그램을 작성하기위치
요즘 빌더를 배우고 있습니다.
그런데, 통신관련 프로그램을 하는 중에 잘 되지 않아 이렇게 질문을 올립니다.
통신 데이타를 보내는 것은 Main Form에서 버튼을 누르면 데이타를 보내게 했기에
송신은 별 문제없이 되는데 수신이 문제입니다.
수신의 경우 하이퍼터미널이나 여타 통신 프로그램처럼 계속 수신을 받으려고 합니다.
수신된 내용을 Memo창에 표시를 하구요
그런데, 쓰레드에서 데이타가 수신되면 수신된 데이타를 읽어 표시하려고
"WaitCommEvent"을 이용하여 데이타가 수신될때만 Open 명령을 실행하려 했더니
프로그램 실행도중 "WaitCommEvent "에서 멈추더군요..
그래서 그런지 프로그램이 "WaitCommEvent"에 멈추어 있는동안은
송신도 이루어지지 않고, 어느 데이타가 수신되어야만 송신도 가능하더라구요
어떻게 해결 해야 할지 모르겟네요..
데이타의 수신을 항시 확인하면서 송신이나 다른 작업을 할수 잇는 방법은 없을까요..
쓰레드에서 수신되 데이타를 읽어와서 확인하는 방법말고
이벤트나 인터럽트같은 것을 사용하는 방법은 없는것인가요?
보통 마이컴의 경우 데이타가 수신되면 인터럽트가 발생하여 메인 프로그램과는 별도록
제어할 수 있잖아요..그렇게 하고 싶습니다..
많은 고수님들의 답변 부탁드립니다.
*------ apicom.cpp 내용----
/* 통신 Port로 부터 Signal이 들어오는지를 감시 한다. */
bool WaitRxEvent(int Port)
{
DWORD dwEvtMask = 0;
::WaitCommEvent(m_hCommPort[Port], &dwEvtMask, NULL);
if ( (dwEvtMask & EV_RXCHAR) == EV_RXCHAR )
return true;
else
return false;
}
*------ rs232Thred.cpp 내용 ----
void __fastcall RS232Thread::Execute()
{
char inbuff;
// 테이타 수신 확인
while( WaitRxEvent(th_Port) )
{
//데이타가 수신되면 다음 명령을 실행한다.
// serial data Read
bool kk = COM_Read(th_Port, &inbuff, 1);
if( kk )
{
MainForm->Memo2->Text = inbuff;
}
Sleep(1);
}
}
|