|
(앗... 지금 유저 로긴이 안된당)
저도 머 잘 아는 것은 아니지만요...
Synchronize()보다는 while-loop가 문제일것 같군요.
어플리케이션이 어떤 것인지는 모르겠지만 타이머등을 이용해서
약간의 시간 간격을 두고 디스플레이를 변경하도록 바꾸면 어떻까요?
아니면 시리얼포트로 무언가가 들어올 때 이벤트를 발생시키고
그 이벤트 핸들러에서 디스플레이를 해줄 수도 있겠구요.
(이렇게하면 Thread를 안써도 될것 같군요)
이 골격을 그대로 가져가고 싶으시면 Thread의 Priority를
낮춰도 상황이 약간은 좋아질것 같기도 하네요.
또, while-loop 안에
Application->ProcessMessages();
를 추가하면 메인폼의 컨트롤들의 반응시간을 앞당길 수는
있을것도 같구요..
제가 아는 것은 이정도밖에 없네요.
초보중 초보^^; 님이 쓰신 글 :
: 제가 시리얼 통신을 이용한 프로그램을 짜서 사용하고 있습니다. 사실 지난 번 질문 했던 사람입니다. ^^;
: 그런데 동시에 표시해야 할 계측값의 종류가 많아서 (ComboBox, MaskEdit등등이 20개가 넘습니다)
: 밑의 코드안에서 처럼 하나의 Thread안에 4개의 Synchronize함수(Display 1,2,3,4)를 쓰고있습니다. 이러면 프로그램이 느려지나요?
: 실행은 잘 되는데 실행을 시키면 updown component가 한 참을 눌러야 반응이 올만큼 너무 느립니다.
:
:
: -----------------------------
: __fastcall TRead::TRead(bool CreateSuspended)
: : TThread(CreateSuspended)
: {
: }
: //--------------------------------------------------------------
:
: void __fastcall TRead::Display1()
: {
: 제가 짠 코드...계측기와 Handshaking하고 값을 읽어오지요..
:
: }
:
: //--------------------------------------------------------------
: void __fastcall TRead::Execute()
: {
: //---- Place thread code here ----
:
: DWORD dwBytesRead;
: FreeOnTerminate = true;
: ......................
: while(1)
: {앞부분.......................
:
: Synchronize(Display1);
: Synchronize(Display2);
: Synchronize(Display3);
: Synchronize(Display4);
:
: 뒷부분......................
: }
:
: }
:
:
|