|
안녕하세요..
시리얼 통신에서... 타임아웃 구조체 있잔하요?
COMMTIMEOUTS timeouts;
timeouts.ReadIntervalTimeout = 0xFFFFFFFF;
timeouts.ReadTotalTimeoutMultiplier = 0;
timeouts.ReadTotalTimeoutConstant = 0;
timeouts.WriteTotalTimeoutMultiplier = 1;
timeouts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hCom, &timeouts);
RS232C time out 구조체에서...ReadIntervalTimeout =0xffffffff 를 주는건 사용안한다는 의미로 봐도 되나요?
(이렇게 큰 숫자를 주는건 ... )
TotalTimeoutMultiplier 와 TotalTimeoutConstant 의 의미가 각각 무엇인가요?
(두개를 곱해서 0 이면 사용안하는 의미라고 하는데 )
제가 여기서 위에서 ReadIntervalTimeout= 500 ( 500 밀리세컨드 ) 주고. (들어오는 두개의 문자사이 시간을 500 으로 설정)
보통 시리얼 쓰레드 안에서
while(!Terminated)
{
/* wait read until a data arrive event */
WaitCommEvent(myRs232c->hmyPort, &dwEventMask, &myRs232c->evnRead);
if(dwEventMask & EV_RXCHAR)
{
SenddMessage(myRs232c->hmyWnd, UM_EVN_RXCHAR, CommStatus.cbInQue, 0);
}
}
그렇게 되면...UM_EVN_RXCHAR 를 받은 부모프로그램에서는 ReadComm ( buff , 1024 ) 하는데....
일반적으로 받는 부모 입장에서...루프를 돌면서... 아래처럼 많이 하는데...
while ( 1)
{
starttime ;
ReadCom ( buff , 1 )
endtime;
if ( endtime -start > 500 ) ShowMessage ( "timeout " );
}
저는 위의 쓰레드에서 정의한...(COMMTIMEOUTS ) 대로 , 쓰레드에서 발생한 timeout을 부모 프로세스 입장에서
어떻게 알아내는지 궁금합니다.. ( ReadComm 할때... 쓰레드에서 정의한 time out 이 발생했는지 안했는지 알수 있는 방법이 있나요?)
수고하세요.
|