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
[28484] [질문] thread사용에 대한 개념적인 질문.
레인싱어 [rainsinger] 966 읽음    2004-01-13 15:05
thread_test.copy.jpg 26.4KB 만들고자 하는 쓰레드 프로그램 예제
볼랜드 포럼에서 항상 좋은 정보만 얻어가다가, 처음으로 질문을 올립니다. 볼랜드C++빌더를 사용하기 시작된지 2주일째 되는 완전초보입니다. 실무를 시작하기 전에 이것 저것 예제 프로그램을 짜보고 있는데, 쓰레드에 대한 부분에서 막혔습니다.

쓰레드에 대한 기본적인 지식은 있는 상태인데, C++에서 쓰레드를 사용해본적이 없어서 어떠한 개념으로 써야 하는지 감이 잡히지 않는 군요. (C++에 익숙하지가 않습니다.) 제가 짜보려는 프로그램은 아주 간단한 프로그램입니다. 스크린샷만 올려도 금방 감을 잡으실 수 있을 것 같군요.

보시다시피 Go!! 를 누르면 프로그레스 바가 앞으로 진행하다가, STOP!!을 누르면 바가 섭니다. 그리고 다시 Go!!를 누르면 바가 진행되는 프로그램입니다. (타이머도 써야겠지만 일단 타이머는 무시하지요.)

당연히 Form1을 만들고 그 안에 프로그레스바 오브젝트를 하나 넣습니다.

class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TButton *btn_go;
        TButton *btn_stop;
        TBitBtn *btn_close;
        TProgressBar *bar_run;
private:    // User declarations
public:        // User declarations
        __fastcall TForm1(TComponent* Owner);
};

그리고 file메뉴에서 thread object를 하나 생성합니다. 당연히 이 DrawProgressBar 클래스의 오브젝트 하나를 TForm에서 생성해야 할 것입니다.

class DrawProgressBar : public TThread
{
private:
protected:
        void __fastcall Execute();
public:
        __fastcall DrawProgressBar(bool CreateSuspended);
};

까지 만들어 놓고 나니, 생기는 문제는 이 두 클래스에 서로 연관이 없다는 점이 생각이 났습니다. 즉, Go!! 버튼을 눌렀을때 발생하는 이벤트 핸들러를 이렇게 생각해 보겠습니다.

void __fastcall TForm1::btn_goClick(TObject *Sender)
{
        MyProgressBar->go();              // MyProgressBar는 DrawProgressBar의 오브젝트.
}

그렇다면 이제 go() method는,

__fastcall DrawProgressBar::go(void)
{
        bar_run->StepBy(1);               // ????????
}

위에서 bar_run 오브젝트는 Form1에서 생성된 오브젝트라고 말씀드렸습니다. 따라서 아직 컴파일은 해보지 않았지만 당연히 이 코드는 이대로 돌아가지 않겠지요. 그렇다면 이 프로그레스바 오브젝트를 DrawProgressBar 클래스 안에서 선언해야 하는 걸까요? 만약 그렇다면 어떻게 그 오브젝트를 Form1 위에서 나타낼 수 있을까요?

결국 질문을 요약하면 이렇습니다. Form1이 갖고 있는 오브젝트를 어떻게 다른 클래스가 접근하느냐- 하는 것입니다. 혹은 접근하는 방법론에 대한 것이겠지요. (기술적인 것이 아니라 개념적인) 제 생각에는 C++ 코딩을 하다 보면 이런 문제 많이 만나게 될 것 같은데, 아직 제가 C++에 대한 개념이 정확하게 잡히지 않아 이런 부분을 해결하지 못하는 것 같습니다.

고수분들의 조언을 기다립니다. (정말 질문한번 길게 썼군요^^)

+ -

관련 글 리스트
28484 [질문] thread사용에 대한 개념적인 질문. 레인싱어 966 2004/01/13
34253     Re:[질문] thread사용에 대한 개념적인 질문. 도신 894 2004/01/13
28492     Re:[질문] thread사용에 대한 개념적인 질문. 김용수 1094 2004/01/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.