|
파일에서 한 라인씩 읽어와서 port에 한 라인씩 씁니다.
근데 자꾸 프로그램이 다운이 되서 peekmessage 부분을 추가했습니다.
그랬더니 처음에 읽은 라인만 계속 보냅니다.
peekmessage 부분을 빼면 제대로 한 라인씩 읽어서 보내는데 프로그램이 다운이 되고,
peekmessage를 추가하면 계속 처음의 같은 라인만 보냅니다. fgets 하면 계속 똑같은 라인만 읽어옵니다.
고수님들 제가 멀 잘못했는지 지적을 해주세요....부탁드립니다.
/*******************************************************************************/
/* 함수명 : SendAndRespAck
/*******************************************************************************/
bool TForm1::SendAndRespAck( char *cRead )
{
int nRetry = 0;
for( int nIndex=0; nIndex < 3; nIndex++ )
{
ApdComPort1->PutString( cRead );
while(true)
{
nRetry++;
if( nRetry > 100 )
break;
Sleep(100);
if( ApdComPort1->GetChar() == char( ACK ) )
{
ListBox2->Items->Add( cRead );
return true;
}
}
}
return false;
}
/*******************************************************************************/
/* 함수명 : FileLineSend
/*******************************************************************************/
bool TForm1::FileLineSend()
{
char buf[80], *cRead;
char cGetAccept;
int nLine=0, cReadLen=0, ch=0 ;
MSG msg;
m_fp = fopen( m_szPubFileName, "rt" );
ZeroMemory( buf, sizeof(buf) );
while (!feof(m_fp))
{
while(true)
{
if(GetMessage(&msg, 0, 0, 0) || PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
cRead = fgets( buf, 80, m_fp );
cReadLen = strlen(cRead);
cRead[cReadLen-1] = '\r';
if( !SendAndRespAck( cRead ) )
{
ListBox1->Items->Add("[Log ] File line send fail : NAK 3 ");
ApdComPort1->OnPortClose;
break;
}
}
fclose(m_fp);
}
|