2012-03-09 4 views
1

메인 TForm에 TButton이 있습니다. 위에서 볼 수 있듯이 프로세스가 외부 실행 파일을 호출Delphi 7 : 멀티 스레딩을 구현하는 방법은 무엇입니까?

begin 
    Process_done := FALSE; 

    Process_Result.Clear; 

    cmdProcess.CommandLine := #34+AppPath+'getdata.exe"'; 

    cmdProcess.Run; 

    Repeat 
    Application.ProcessMessages; 
    Until Process_done; 
end; 

, 프로세스는 기본 응용 프로그램을 차단 약간의 시간이 걸릴 수 있습니다 : 사용자가 버튼을 클릭하면 아래의 과정을 실행합니다.

이것은 하나의 프로세스 일 뿐이며 다른 프로세스가 필요합니다.

그래서 멀티 스레딩을 구현하려고합니다. 위의 프로세스를 별도의 스레드에서 실행할 수 있습니다. 다른 프로세스도 마찬가지입니다. 그리고 주 스레드는 두 프로세스가 모두 완료되었는지 확인하는 동안 무언가를 할 수 있습니다.

아무에게도 Delphi 7을 사용하여이 작업을 수행하는 방법을 알려 줄 수 있습니까?

또는 기사에이 점을 간단하게 구현 하시겠습니까?

감사합니다.

답변

11

시도 뭔가를 UI를 동기화하는 방법 기사입니다.

procedure TForm1.Button1Click(Sender: TObject); 
var 
    Thread: TRunProcessThread; 
begin 
    Thread := TRunProcessThread.Create(AnsiQuotedStr(AppPath + 'getdata.exe', #34)); 
    Thread.OnTerminate := ProcessDone; 
    Thread.Resume; 
end; 

procedure TForm1.ProcessDone(Sender: TObject); 
begin 
    // access TRunProcessThread(Sender) to get result information as needed ... 
end; 
+0

감사합니다. 그게 내가 실제로 필요한거야 :) – ewlung

+7

당신은 지금 많은 문제에 빠질만큼 알지만 빠져 나가기에는 충분하지 않습니다. 그러나 스레드를 더 재미있게 배우고, 경쟁 조건, 교착 상태, 리소스 경합 및 VCL의 스레드 안전하지 않은 특성을 직접 체험하는 것보다 배우는 더 좋은 방법은 없습니다. 방금 토끼 구멍을 뛰어 내렸어. 그것은 아주 깊숙이 간다. –

0

TThread로부터 상속받은 클래스를 만들어 거기에 넣어야합니다. 정확히 기억하지는 않지만 파일 -> 새로 만들기 대화 상자에서 TThread 템플릿을 찾을 수있을 것 같습니다. 코드 실행이 끝나면 gui에 알립니다.

type 
    TRunProcessThread = class(TThread) 
    protected 
    cmdProcess: Whatever; 
    procedure Execute; override; 
    public 
    constructor Create(const ACmdLine: String); 
    destructor Destroy; override; 
    end; 

constructor TRunProcessThread.Create(const ACmdLine: String); 
begin 
    inherited Create(True); 
    FreeOnTerminate := True; 
    cmdProcess := Whatever.Create; 
    cmdProcess.CommandLine := ACmdLine; 
end; 

destructor TRunProcessThread.Destroy; 
begin 
    cmdProcess.Free; 
    inherited; 
end; 

procedure TRunProcessThread.Execute; 
begin 
    cmdProcess.Run; 
    ... 
end; 

: 여기에 외부 스레드와 같은 http://delphi.about.com/od/kbthread/a/thread-gui.htm

관련 문제