设置一个全局变量 var isEnd:Boolean; ===================== while(not isEnd) do begin // .... Application.ProcessMessages; end; ===================== 事件发生后设isEnd:=true;
刚好看到过: while true do begin //your code end;在另一个函数中,使用 waitsingleobject(进程ID,时间)
:::如何实现执行一个程序并等待它完成::: 使用createprocess函数创建进程调用应用程序,同时使用waitforsignleobject等待进程结束。在此处理所给为32位版本。 function ExecAndWait(const Filename, Params: string; WindowState: word): boolean; var SUInfo: TStartupInfo; ProcInfo: TProcessInformation; CmdLine: string; begin CmdLine:=filename+' '+params;FillChar(SUInfo, SizeOf(SUInfo), #0); with SUInfo do begin cb := SizeOf(SUInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := WindowState; end;Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL, PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo); if Result then begin //等待应用程序结束 WaitForSingleObject(ProcInfo.hProcess, INFINITE); //删除句柄 CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end; end;
使用CALLBACK不就行了!function A (a,b,c,procCallBack:FARPROC) begin .... //your code above; //At Last: procCallBack(); end;// the call back function procedure procCallBack;stdcall; begin
var
isEnd:Boolean;
=====================
while(not isEnd) do
begin
// ....
Application.ProcessMessages;
end;
=====================
事件发生后设isEnd:=true;
begin
//your code
end;在另一个函数中,使用
waitsingleobject(进程ID,时间)
使用createprocess函数创建进程调用应用程序,同时使用waitforsignleobject等待进程结束。在此处理所给为32位版本。
function ExecAndWait(const Filename, Params: string; WindowState: word):
boolean;
var
SUInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: string;
begin
CmdLine:=filename+' '+params;FillChar(SUInfo, SizeOf(SUInfo), #0);
with SUInfo do
begin
cb := SizeOf(SUInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WindowState;
end;Result := CreateProcess(NIL, PChar(CmdLine), NIL, NIL, FALSE,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, NIL,
PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);
if Result then
begin
//等待应用程序结束
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
//删除句柄
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
begin
....
//your code above; //At Last: procCallBack();
end;// the call back function
procedure procCallBack;stdcall;
begin
end;