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
[54091] Re:Re:Memo 창에 데이터가 많이 들어올때 다운현상?
번외편 [wifemylove] 1262 읽음    2008-07-25 10:47
감사합니다. BeginUpdate()라는 좋은 기능이 있었군요
그런데 *Str_Data = (char)data[0]; 를 해주주고 데이터를 1번부터
넣어줬는데 이건 초기화와는 다른건가요?
string 열은 초기화를 어떻게 해줘야 하는지몰라서 이렇게 했는데
잘못된 방법을 사용중인가요?




둘리 님이 쓰신 글 :
: 정확한 이유는 실제 데이터를 봐야 겠지만.. 작성하신 코드에 약간 이상한 부분이 있어서 몇자 적습니다.
:         String *Str_Data =new String;
:
: 해당 함수를 호출시 항상 위의 라인이 돌아 String 메모리가 하나 만들어 지는데.. 함수의 종료까지 위의 메모리를 제거하는 부분이없군요. 일단 메모리 누수 현상이 우려 됩니다.
:
: 또한 String 을 꼭 new 로 잡는 포인터 형이어야 하는 것인지 하는 것 입니다...
:
: 그냥 String Str_Data; 라고 변수로 잡아도 별 무리가 없을 듯 합니다만..
:
: 또한 Memo1->Lines->Add() 함수 호출에 있어서 가능하면  앞쪽에 Memo1->BeginUpdate()  및
: 뒷쪽에 Memo1->EndUpdate() 를 수행해 주시는 것이 좋을 듯 합니다.
: 앞쪽은 for 문 앞이고 뒤는 함수 마지막쪽에 두시면 될 듯 합니다.
:
: Memo 등 TStrings 형식의 메모리에 대해서 화면 갱신 부분이 되는 컴포넌트의 경우 (기타 리스트, 트리등도)
: BeginUpdate 및 EndUpdate 함수를 이용하시는 것이 속도면에서 유리하며 훨씬 부드러운 입력이 될 듯 합니다.
:
: 수고하세요..
:
:
:
:
: 번외편 님이 쓰신 글 :
: : 일단 아까 그 문제는 해결이 되었네요..
: : 너무 어려운길을 선택했었네요 memicmp;;
: : strstr로 해결했습니다.
: :
: : 그런데 데이터가 한꺼번에 많이 들어올때 시빌더가 다운이 되는데
: : 이게 왜이럴까요? 버퍼사이즈를 늘려줘도 버퍼를 초기화를 해줘도 다운이 되는데
: : 처리속도가 느려서 그런걸까요? baudrate는 19200(터미널창으로 할때는 다운되지 않습니다)
: : 구여 도중에 받는 도중에 if문이 여러개 있어서 처리하느라고 다운되는줄 알고
: : if문을 다 빼도 시빌더가 멈추네요.
: :
: :
: : memo 창도 따로 초기화를 해줘야 하나요?
: :
: : 소스 함께 올립니다. 문자열 [50]개가 쌓이기 전에 0x0d는 꼭 들어옵니다.
: :
: : void __fastcall TForm1::Comm1RxChar(TObject *Sender, DWORD Count)
: : {
: :         char str[500];
: :         unsigned char buffer=0;
: :         DWORD i,j;
: :         char Buff[100];
: :         int k;
: :         static char data[500],serial_number = 0;
: :         char serial_data[500];
: :
: :         String *Str_Data =new String;
: :         Comm1->Read(serial_data,Count);
: :
: :         for(i=0;i<Count;i++)
: :         {
: :                 data[serial_number] =   serial_data[i] ;
: :
: :                 if( data[serial_number] == 0x0d )
: :                 {
: :                         data[serial_number] =   serial_data[i] ;
: :
: :                         if( (data[0] != 0x1b) && (data[1] != 0x1b) )
: :                         {
: :                                *Str_Data = (char)data[0];
: :                                for(j=1;j<serial_number  ;j++)
: :                                {
: :                                        *Str_Data = *Str_Data + (char)(data[j]);
: :                                }
: :
: :                                Memo1->Lines->Add(*Str_Data )  ;
: :                         }
: :                         serial_number = 0;
: :                         memset(data,0,500);
: :                 }
: :                 else
: :                 {
: :                         serial_number++ ;
: :                 }     
: :         }

+ -

관련 글 리스트
54083 Memo 창에 데이터가 많이 들어올때 다운현상? 번외편 1097 2008/07/24
54093     Re:Memo 창에 데이터가 많이 들어올때 다운현상? 장성호 1038 2008/07/25
54096         Re:Re:Memo 창에 데이터가 많이 들어올때 다운현상? 번외편 1075 2008/07/25
54098             Re:Re:Re:Memo 창에 데이터가 많이 들어올때 다운현상? 장성호 1057 2008/07/25
54084     Re:Memo 창에 데이터가 많이 들어올때 다운현상? 둘리 1080 2008/07/24
54091         Re:Re:Memo 창에 데이터가 많이 들어올때 다운현상? 번외편 1262 2008/07/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.