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
[67406] Thread 를 이용하여 외부 장비와 통신하려 합니다.(씨리얼 통신) 김태선님 소스 참조
프로그램 초짜 [] 1125 읽음    2012-06-02 12:39
안녕하세요 토요일 점심이 다와가네요 식사들 하셧습니까...

프로그램 삼매경에 빠져있는 초짜 입니다.

시리얼 통신프로그램을 하나 만들엇구요.. 기존엔 타이머로 구현을 하였습니다.

근데 주기가 일정치 않고 통신도 자주 문제가 발생하여서 쓰레드로구현하면

안정적으로 통신 할수있다 생각되어 Thread를 구현할려고 합니다. 

게시판 글 찾다보니  김태선님 소스가 눈에 보이더군요... 잘 이해는 안되지만 일단 구현은 쉽게 되었습니다.

소스를 아래와 같습니다. 그대로 카피 하였습니다.

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    class CCrazy : public TThread
    {
        int  Index;
        int  Count;
    public:
        __fastcall CCrazy(int index, bool CreateSuspended) : TThread(CreateSuspended)
        {
            Index = index;
            Count = 0;
            FreeOnTerminate = true;
        }
        void __fastcall Execute()
        {
            while(!Terminated)
            {
                char msg[100];
                wsprintf(msg, "[#%d] The Thread has number %d", Index, Count);
                Form1->Memo1->Lines->Add(msg);
                Sleep(1);
                Count++;
                if (Count > 1000)
                {
                    Terminate();
                }
            }
        }
    };
    for(int c = 0; c < 10; c++)
        new CCrazy(c, false);           // 테스트 쓰레드 10개 동시 기동
}
//---------------------------------------------------------------------------

일단 제가 몇가지 수정을 해보겠습니다.

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    class CCrazy : public TThread
    {
        int  Index;
        int  Count;
    public:
        __fastcall CCrazy(int index, bool CreateSuspended) : TThread(CreateSuspended)
        {
            Index = index;
            Count = 0;
            FreeOnTerminate = true;
        }
        void __fastcall Execute()
        {
            while(!Terminated)
            {
                char msg[100];
                wsprintf(msg, "[#%d] The Thread has number %d", Index, Count);
                Form1->Memo1->Lines->Add(msg);   메모장 출력
                Sleep(1);
                Count++;
                /*if (Count > 1000)
                {
                    Terminate();                       // 스레드는 프로그램이 구동되고 있는이상 절대 꺼지지 않습니다 ^^
                }
                */
            }
        }
    };
       new CCrazy(c, false);      //쓰레드를 하나만 구현합니다.        
}

이렇케 구현하니까 일단 통신은 되더군요..

저는 이렇케  해보고 싶습니다.

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
         new CCrazy(c, false);      //쓰레드를 하나만 구현합니다.            
}
//---------------------------------------------------------------------------

    안되더군요 ㅜㅜ 어떻게 해야 켤수 있나요?

    제가 쓰레드를 끄는 코드 인 Terminate();를 삭제 하였습니다.
    나중에 어떻게 끄죠????.......
    저것들을 헤더 파일에 넣고
    Form1에서 켜고 끄고 하고싶어요

    그리고 저 프로그램을 저대로 쓰는게 문제는 없는건가요?   

고수 분들의 고견을 듣습니다.
도움 부탁드립니다.

+ -

관련 글 리스트
67406 Thread 를 이용하여 외부 장비와 통신하려 합니다.(씨리얼 통신) 김태선님 소스 참조 프로그램 초짜 1125 2012/06/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.