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
[50404] Re:Re:[재질문]실시간으로 그려야해서...
왕초보빌더 [coppermilk] 1900 읽음    2007-08-29 03:12
먼저 답변에 감사드립니다...

데이터를 실시간으로 그려야 합니다.
한번에 가져오는 데이터는 약 1600 ~ 32000개 정도 됩니다.
그 데이터를 실시간으로 그려야 해서 그리는 쓰레드에서는 그리는 작업만 하도록 했습니다.
두개의 쓰레드에서는 다른 작업은 거의 하지 않습니다.
1. 데이터를 읽는 쓰레드
    데이터를 받아오기만 합니다.
    배열로 받아서 버퍼에 쌓아둡니다.
2. 데이터를 차트에 그리는 쓰레드
    받아온 데이터를 단순히 그려줍니다.
    버퍼에 쌓여있는 데이터를 그리기만 합니다.

위와 같은 작업만 하는데... 이상하게도 차트가 있는 메인폼의 버튼을 클릭해도 동작이 되지를 않습니다.
따로 232로 메시지를 받아서 처리하는 루틴이 있기는 하지만... 그게 큰 영향을 미치는 것 같지는 않습니다.

그리고 메인 쓰레드는 어떤 쓰레드를 말씀하시는 건가요???
application 을 말씀하시는 건가요??? 아니면 1번 데이터를 읽는 쓰레드를 말씀하시는 건가요???

제안에 대한 질문
[제안 1]실시간으로 데이터를 그려야하기 때문에 데이터를 받아오는 쓰레드와 그리는 쓰레드를
각각 두었습니다. 데이터를 받아오는데 시간이 걸리기 때문입니다.
그리는 쓰레드에서 Series->AddXY() 하면서 한번씩 Application->ProcessMessage() 해줘도
별로 효과가 없습니다.
[제안 2] 메인쓰레드와 Syncronize ==> 여기서 메인 쓰레드는 데이터를 읽어오는 쓰레드를 말씀하시는 건가요???




장성호 님이 쓰신 글 :
: TChart가 왠만큼 데이타 많이서는 버벅거리지 않는걸로 알고있습니다만.....
:
: [질문]
: 얼마나 많은 양의 데이타를, 얼마나 자주 가져와서, 얼마나 자주 TChart에 갱신해 주는지요?
:
: 질문의 내용만으로는 로직이 어떻게 돌아가는지 잘 이해가 되지않아
: 이렇게해보세요 라고 구체적으로 얘기하는 힘드네요
:
: 그래도 한두가지 제안해보면..
:
: [제안1]
: 두번째 쓰레드에서 하는 작업을 그냥 메인쓰레드에서 하면 안되나요
: 그리고 Series->Add()하면서 중간에
: Application->ProcessMessage()  해주시면 그런 문제 없어질것 같은데요
: 메인쓰레드에서 할경우 위와같이 해주면 데이타가 아무리 많아도 문제없죠
:
: [제안2]
: 그냥 두번째 쓰레드를 2번방법으로 해두고
: 메인쓰레드와 Syncronize 하시면 될듯도...
:
: 방법3은 안되구요  , Sleep한만큼 손해봅니다.
:
: 방법1이 통하는 이유는?
: 두번째 쓰레드가 멈춘후에 메인쓰레드 TChart의 화면갱신이 일어나기땜시....
: 되는것 같은데.... 권하고 싶은 방법은 아니네요
:
:
: 2번방법으로 하되 TChart에 그리는것을 메인쓰레드에서 하는
: 제안1을 권합니다.
: 제생각엔 그 방법이 제어도 편하고 , 속도도 빠를것 같습니다.
:
: 그럼....
:
:
: 왕초보빌더 님이 쓰신 글 :
: : 프로그램이 시작되면 쓰레드를 두개 만듭니다.
: : 첫번째 쓰레드 : 데이터를 읽어오는 쓰레드
: : 두번째 쓰레드 : 데이터를 TChart에 그리는 쓰레드
: : 많은 양의 데이터를 읽어와서 빠른 속도로 그래프로 출력해야 해서 위 처럼 두개의 쓰레드를 사용했습니다.
: : 그리고, 둘 간에 동기화는 하지 않았습니다.
: : 데이터를 읽어와서 TChart에 그리는데 까지는 전혀 문제가 없습니다.
: :
: : 그런데, TChart 가 CPU 를 너무 잡아서 그런지...
: : TChart가 메인 폼에 있는데... 메인폼에 있는 버튼들이 잘 동작하지 않습니다.
: : 마우스를 스무번 이상 클릭해야 한번 정도 동작하는 것 같습니다.
: :
: : 해결책이 없을까요?
: : 고수님 들의 답변 기대합니다... 도와주십셔... ㅜ.ㅜ
: :
: : 참... 그리고  TChart 7 Pro 버전에서는 위와 같은 문제가 생기지 않을까요?
: : 도저히 방법이 없다면 구입을 해서라도 해결해야 해서리...
: :
: : 그리고 다음은 제가 시도해본 방법입니다.
: : 1. 데이터를 받아오는 쓰레드에서 메시지를 날려서 그래프를 그리는 쓰레드를 resume 과 suspend 를 반복하게
: : 해줘봤습니다.
: : 효과를 약간 보기는 했지만, delete 쓰레드를 했을때 쓰레드가 죽지 않는 문제가 발생합니다.
: :
: : 2. 그래프를 그리는 쓰레드 안에서 루프를 돌면서 주기적으로 Application->ProcessMessage() 를 해줘봤습니다.
: : 그러나, 별로 효과가 없었습니다.
: :
: : 3. 그래프를 그리는 쓰레드 내부에서 일정 량을 그린후 Sleep(100)을 줘봤습니다.
: : 위의 1번과 비슷한 효과를 얻었습니다.
: :
: : 제가 시도해본 방법으로 약간의 효과를 얻을 수는 있었지만, 만족할 만한 수준은 아니었습니다.

+ -

관련 글 리스트
50402 [질문]TChart 관련... 도움 부탁드립니다.... ㅜ.ㅜ 왕초보빌더 1886 2007/08/29
50403     Re:[질문]TChart 관련... 도움 부탁드립니다.... ㅜ.ㅜ 장성호 1917 2007/08/29
50404         Re:Re:[재질문]실시간으로 그려야해서... 왕초보빌더 1900 2007/08/29
50406             Re:Re:Re:[재질문]어디에 문제가 있는지는 알았습니다. 그런데... 왕초보빌더 1745 2007/08/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.