시리얼 포트를 통해 계측 장비가 계측한 결과를 보내준다.
이 결과가 입력 되는것은 언제인지 알 수가 없고.
한번에 데이터 셋이 다 들어온다는 보장도 없다.
확실한 것은 CR과 LF가 들어오면 하나의 데이터 셋이 끝났다는 것이다.
그래서 만든 것이 다음과 같은 코드
for(int i = 0 ; i < iSize; i++)//들어온 갯수 만큼 데이터를 읽어 와 화면에 보여줌
{
(m_ComuModule->m_QueueRead).GetByte(&aByte);//큐에서 데이터 한개를 읽어옴
str.Format("%c", aByte);
tmpResult+=str;
positionData+=str;
//// 들어온 문자가 개행문자인지 확인한다.
//// 데이터 한 셋이 끝나면, '13'(CR),'10'(LF) 가 들어 오기 때문에 이렇게 분리할 수 있다
//// **** 초음파 위치 추적 장치에만 적용되는 방식이다. *****
if(aByte == 10) {
// 스트링 스캔 함수 사용 해서 값을 얻어낸다.
sscanf(positionData ,"%d, %d, %d, %d, %d, %d",&m_IdistanceNum, &m_Idistance, &m_IxPosition, &m_IyPosition, &m_IzPosition, &m_Icycletime);
// 데이터를 업데이트 한다.
m_strUSPositionX.Format("%d",m_IxPosition);
m_strUSPositionY.Format("%d",m_IyPosition);
m_strUSPositionZ.Format("%d",m_IzPosition);
setDataToDlg();
// 스트링을 정리한다.
positionData="";
m_bSendUSDataFlag = true;
}
}
하지만, CString은 놀라운 기능을 가지고 있으니.
바로 token 기능이다.
eachData = receivedData.Tokenize("#",curPos);
while (eachData != "") {
m_dataArray.Add(eachData);
eachData = receivedData.Tokenize("#",curPos);
}
같은 기능을 하는 코드인데,
훨씬 간단 하게 끝났다.
CString 은 너무 MFC에 의존한다고 생각 했던 시절도 있었지만.
요즘 드는 생각은 ..
내가 MS 윈도우즈가 아닌 환경에서 개발할 일이 얼마나 있겠냐... 라는 생각이다.
CString의 기능을 구현하거나, 같은 기능을 가지는 클래스를 찾는 것보다.
내 일을 더 하는게 훨씬 나을 것이라는 생각이다.




