|
아래와 같이 연속적인 프로토콜이 들어 왔을 때
C8;3F;00;00;F8;C8;3F;00;00;F8;C8;3F;80;00;78;C8;3F;00;00;F8;C8;3F;00;00;F8;
C8;24;00;05;02;00;25;10;00;D7;C8;3F;00;00;F8;C8;24;00;05;02;00;25;10;00;D7;C8;3F;00;00;F8;
C8;24;00;05;02;00;25;10;00;D7;C8;3F;00;00;F8;C8;3F
0xc8를 기준으로 프로토콜을 분리해 내고 싶은데요...
sleep 함수를 쓰면 프로토콜이 잘 분리가 되는데요. sleep함수를 주석 처리 하면
if (Data[i] == 0xc8) <-- 이 부분에서 체크가 안 되는 부분이 있더라고요..(아래 소스 참고)
왜 그런지 도통 이해가 되지 않습니다. 혹시 아시는 분 있으시면.. 답변 부탁합니다.
그리고 받는 부분을 쓰레드로 만들고 싶은데 어떻게 하는게 좋을 까요...
참고로 보내는 부분은 쓰레드로 구현돼 있습니다.
** 받는 부분 (아직 테스트 중입니다. )
void __fastcall TThreadComm::ParsingData(BYTE *Data, const int &Size)
{
for (int i = 0; i < Size; ++i)
{
if (RcvCnt >= Rcv_Buff_Size) //overflow...
RcvBuffInit();
if (Data[i] == 0xc8)
{
if (FOnRcvCplt)
{
// Sleep(700); <--- 이부분
Synchronize(&SyncRcvCplt);
}
if (NowRcving)
RcvBuffInit();
NowRcving = true;
RcvBuff[RcvCnt++] = Data[i];
}
// else if (Data[i] == ETX)
// {
// if (NowRcving)
// {
// RcvBuff[RcvCnt++] = Data[i];
// if (FOnRcvCplt)
// Synchronize(&SyncRcvCplt);
//
// RcvBuffInit();
// }
// }
else if (NowRcving) //Frame Data
{
RcvBuff[RcvCnt++] = Data[i];
}
}
}
//---------------------------------------------------------------------------
|