C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[39228] Re:데이터를 이쁘게 저장하려하는데요 잘 안되서요..
라스코니 [chouoo] 1528 읽음    2005-02-23 09:08
현재 장비에서 전송되는 데이터는 버퍼에 저장을 하도록 하셨겠죠??

현재 님의 프로그램이 어떤 식으로 구성되어 있는지 잘 모르겠지만 제가 생각하기에....

장비에서 데이터를 받아들이는 cport thread(전송되는 데이터를 버퍼에 저장하는 단계까지 수행),
버퍼의 데이터를 TStringGrid에 뿌리는 thread(?) 또는 함수

아마 이렇게 되 있을 것 같습니다.

효과적이고 확실하게 데이터를 TStringGrid에 뿌리는 방법은 버퍼를 ping - pong 버퍼로 설계하는 것입니다.

즉, 버퍼를 2개 두고, 한쪽 버퍼가 데이터를 받고 있을 동안 다른 쪽의 버퍼의 데이터로 뿌리고, 그 다음에는 맞바꾸어 처리하고 이런 식이죠..

pseudo 코드는 대략 아래와 같을 겁니다.

struct Buffer {
BOOL readwrite;    // readable = TRUE,  writeable = FALSE
struct data {
int a;
float b;
char c;
}
} Buffer1, Buffer2;

초기화 readwrite = FALSE;   // 처음에는 데이터가 없을 것이므로

receivedatathroughCPORT()
{
if(Buffer1.readwrite == FALSE) {
store receiving data to Buffer1 data pool
Buffer1.readwrite = TRUE;
SendMessage(STRINGGRID_PROCESS);  // 이런식으로 MESSAGE를 보내죠
}
else if(Buffer2.readwrite == FALSE) {
store receiving data to Buffer2 data pool
Buffer2.readwrite = TRUE;
SendMessage(STRINGGRID_PROCESS);  // 이런식으로 MESSAGE를 보내죠
}
}

processbufferdata()   // STRINGGRID_PROCESS 메시지를 받아 처리하도록 설정
{
if(Buffer1.readwrite == TRUE) {
display Buffer1 data to TStringGrid
Buffer1.readwrite = FALSE;
}
else if(Buffer2.readwrite == TRUE) {
display Buffer2 data to TStringGrid
Buffer2.readwrite = FALSE;
}
}

이런 식이면 동작할 겁니다. 제가 실용에서 써먹은 적이 있으니까요. 하지만 실제 어플리케이션에서는 동기화(Synchronization)같은 문제가 있을 수도 있으니 유념하시고요...

마지막으로 CPORT에서 데이터를 받은 후 processbufferdata에 MESSAGE를 날려서 처리하는 것이 가장 좋은 방식일 것 같네요.. processbufferdata에 별도의 thread를 쓰는 것보다는요.

도움이 되었기를....



초보멋진빌더 님이 쓰신 글 :
: 먼저 warship님 라스코니님, 씨크릿님께 감사 드립니다.
: 고수님들때문에 장비제어에 막바지에 왔습니다.
: 장비에서 데이터를 받아 memo에서 확인을 하고 있습니다.
: 무슨 질문을 할 건지 아시겠죠..
:
: 질문은 장비에 데이터가 stx 데이터 etx bcc 로 데이터는 메모장에 표기가 됩니다.
: 데이터는 저번에 말씀드린대로 "100,2000,1500,-1.456,1.550 --------"으로 보내지고 있는데
: 각 데이터 구분은 ","로 char 데이터를 전송하구요.데이터 갯수는 9개입니다.
: 근데 TStringGrid 에다가 이쁘게 정렬을 하고 싶습니다.
:
: 데이터 다운로드는 장비에게 hex 값을 날리면 장비에서 전송되어 오는데
: 버퍼에 저장되는 데이터를 그대로 TStringGrid 에 바로 다운로드 할수는 없나요..??
: 아님 memo 에서  TStringGrid  로 옮기는 법은요..??
:
: 제가 해 봤는데.. 잘안되서리.. ㅜㅜ.
:
: 아시죠.. 제가 초짜라는거.. 저도 계속 해보겠습니다.

+ -

관련 글 리스트
39220 데이터를 이쁘게 저장하려하는데요 잘 안되서요.. 초보멋진빌더 800 2005/02/22
39228     Re:데이터를 이쁘게 저장하려하는데요 잘 안되서요.. 라스코니 1528 2005/02/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.