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
[5977] Re:Re:Re:[질문] 쓰레드가 두개일때 두번째것이 엄청느림<==해결방법
홍재점 [] 2731 읽음    2001-03-09 09:42
안녕하세요...


Thread를 써서 통신을 많이해 보았는데
아래 내용과 같이 사용하면 이상이 없을 겁니다.
원인은 처음에 발생한 Thread1이 CPU의 점유율을 모두 차지 하고 있기 때문입니다.
이렇게 되면 다음에 발생된 Thread2...Threadn까지 모두 Thread1이 CUP의 점유율을
나누어 주기전까지는 거의 동작을 목하고 마는 상태가 됩니다.

아래 간단한 Source입니다.

//========================
// ThreadTest.h
//========================

#ifndef ThreadTestH
#define ThreadTestH
//---------------------------------------------------------------------------
#include <Classes.hpp>
//---------------------------------------------------------------------------
class ThreadTest : public TThread
{
private:
protected:
    void __fastcall Execute();
    int Thread_Port;
    int Th_Max_Error_Cnt;


public:
    __fastcall ThreadTest::ThreadTest(const int mPort);

};
//---------------------------------------------------------------------------
#endif





//==========================
// ThreadTest.cpp
//==========================

//---------------------------------------------------------------------------
__fastcall ThreadTest::ThreadTest(const int mPort) : TThread(false)
{
    // Port Number를 Setting한다.
    Thread_Port = mPort;


}
//---------------------------------------------------------------------------
void __fastcall ThreadTest::Execute()
{
   int    Errcount;
   BYTE   TX_Buffer[1024]; //수신 Buffer
   BYTE   RX_Buffer[1024]; //송신 Buffer

   Errcount = 0;

   while(!Terminated)
   {

        while(1)
        {
             if (Terminated) break;

             if (Th_Max_Error_Cnt < Errcount) {
                 // Form에 Error를 Display 한다.
                 break;
             }
             //
        ZeroMemory(Tx_Buffer, sizeof(Tx_Buffer));
        ZeroMemory(Rx_Buffer, sizeof(Rx_Buffer));
            memcpy(Tx_Buffer, "12345678901234567890", 20);

            RetByte = COM_Write(Thread_Port, Tx_Buffer, 20);

            if (RetByte == 0x00) {  // Return OK인 경우
                //Form에 Status Display
                Errcount = 0;
       
            } else {
                // Error Display
                Errcount++;
            }
            Sleep(200); 
              // Thread에서 가장 중요함 Sleep을 주는 이유는 PC CPU의 Task의 시간을
            // 다른 쪽으로 주기위하여 1/5초를 Sleep해 주는 것이 가장 적당 하다.
            // NT인 경우 Task Manager를 보면 CPU점유율이 10%이상을 넘어가지
            // 않을 것으로 본다.

        }
        break;
   }
   if (IsOpened(Thread_Port) == true) {
       COM_Close(Thread_Port);
   }
   FreeOnTerminate = false;
   if (!Terminated) {
      Terminate();
   }


}




왕족 님이 쓰신 글 :
: 답변 감사합니다.
:
: 역시 전 초보군요....
: 제가 가진 책에는 "수행속도" 관한 내용이 없습니다.
: 그냥 똑같이 돌아가도록 하고 싶은데...어떻게 하죠?
:
:
: 조재영 님이 쓰신 글 :
: : 쓰레드에는 수행속도 등급이 있습니다.
: : 등급을 잘 조정해 보세요.
: :
: :
: :
: : 왕족 님이 쓰신 글 :
: : : 초보가 드디어 실무용 프로그램에 도전했습니다.
: : : 그런데...
: : :
: : : 현재: COM1 읽고쓰고 하는 쓰레드 처리
: : :       COM2 읽기만 하는 쓰레드 처리
: : :
: : : 현상: COM1은 정상동작되나 COM2 처리 쓰레드는 속도가
: : :       엄청느림
: : :       COM1 과 COM2 쓰레드 코드와 처리는 동일한 구조임
: : :
: : : 질문: 즉시즉시 수신데이타를 나타나게 할수 없나요?
: : :       왜 COM2는 느리죠?

+ -

관련 글 리스트
5855 [질문] 쓰레드가 두개일때 두번째것이 엄청느림 왕족 2167 2001/03/03
5856     Re:[질문] 쓰레드가 두개일때 두번째것이 엄청느림 조재영 2442 2001/03/03
5858         Re:Re:[질문] 쓰레드가 두개일때 두번째것이 엄청느림 왕족 2358 2001/03/03
5977             Re:Re:Re:[질문] 쓰레드가 두개일때 두번째것이 엄청느림<==해결방법 홍재점 2731 2001/03/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.