Q&A

  • Thread 에 관해서 질문좀요
Main 유닛은 Thread 유닛에서 사용해야되고 Thread 유닛은 Main 유닛에서 사용해야 하는데요...
Main 유닛의 Procedure를 Thread 에서 Synchronize 해서 사용하려고 합니다
Main 유닛의 Procedure를 Thread 에서 호출하는 방법 없나요?
그리고 위의 방법으로  Synchronize 해서 사용해도 별 문제는 없나요?
1  COMMENTS
  • Profile
    김동원 2008.05.04 20:57
    Thread에 Event를 설정하고 그 Event를 MainForm에 연결해서 사용하면 될듯 합니다.
    Thread에서 Event를 Call할 때 Synchronize를 사용하면 되구요..

    다음은 간단한 예 입니다.

    TMyThread=class(TThread)
    private
        FEvent: TNotifyEvent;
        procedure DoEvent;
    protected
        procedure Execute; override;
    public
        property Event: TNotifyEvent read FEvent write FEvent;
    end;

    procedure TMyThread.DoEvent;
    begin
        if Assigned(FEvent) then
            FEvent(Self);
    end;

    procedure TMyThread.Execute;
    begin
        while(not Terminated)
        begin
            Synchronize(DoEvent); // --> Synchronize를 이용한 Event 실행
        end;
    end;


    //MainForm에서 TMyThread Event연결
    TMainForm=class(TForm)
    private
        FThread: TMyThread;
        procedure ThreadEvent(Sender: TObject);
    public
        constructor Create(AOwner: TComponent); override;
    end;

    procedure TMainForm.Create(AOwner: TComponent);
    begin
        FThread := TMyThread.Create(true);
        FThread.Event := ThreadEvent;
        FThread.Resume;
    end;

    procedure TMainForm.ThreadEvent(Sender: TObject);
    begin
        // 여기서 필요한 처리를 하면됩니다.
    end;

    도움이 되셨길 바랍니다....
    그럼 즐코하세요... ^^

    --------------------------------------------------------------------------------------------------------