【发布时间】:2014-08-08 18:24:23
【问题描述】:
我有一个 Startandwait 函数,它创建一个进程并等待结束。如何创建进度条来指示进程的进度?
function StartRAndWait (CommandLine : string) : Boolean;
var
Proc_info: TProcessInformation;
Startinfo: TStartupInfo;
ExitCode: longword;
CreateOK : Boolean;
begin
Result := False;
FillChar(proc_info, sizeof (TProcessInformation), #0);
FillChar(startinfo, sizeof (TStartupInfo), #0);
Startinfo.cb := sizeof (TStartupInfo);
Startinfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
Startinfo.wShowWindow := SW_HIDE;
CreateOK := CreateProcess(Nil, PChar('Program.exe ' + 'CMD BATCH ARQ.EXT SampleOutput.txt'), nil,
nil,False, CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS, nil,nil, StartInfo, proc_info);
if (CreateOK) then
begin
WaitForSingleObject (proc_info.hProcess, INFINITE);
GetExitCodeProcess(proc_info.hProcess, ExitCode);
Result := True
end;
CloseHandle(proc_info.hThread);
CloseHandle(proc_info.hProcess);
end;
【问题讨论】:
-
您想准确显示什么进度?进程没有自己的进度状态。如果您尝试显示衍生进程正在执行的操作的进度,则衍生进程必须通过 IPC 机制(例如管道)将该信息传达回您的主进程。
-
选框进度条是您需要的,除非您可以使用 ipc 获得有意义的进度测量。
-
为什么在 CreateProces 失败时调用 CloseHandle?
-
@DavidHeffernan true 我会修复它。
-
我认为我表达得很糟糕,我实际上希望进度条根据进程进行的时间填充。所以当他完成时,酒吧很快就会填满。她不需要显示过程本身的确切进度,只显示正在发生的事情的用户,而不仅仅是鼠标指针。
标签: delphi progress-bar createprocess