我遇到了一個有趣的問題。Delphi:CreateProcess + WaitForSingleObjects + DDE = 15秒延遲
我有一個從DDE服務器讀取一些值的DDE客戶端。 當我從Delphi啓動這個客戶端時,或者在exe上使用dblclick時,結果立即出現。
但是:當我從Indy TCPServer的線程或主應用程序啓動它時,我得到了15秒的延遲。
我用這個代碼啓動子:
function StartAndWaitProcess
(CmdLine : string='';
CmdShow : integer = SW_SHOW;
TimeOut : longint = -1) : Int64;
var
SInfo: TStartupInfo;
PInfo: TProcessInformation;
ExitCode : Cardinal;
begin
Result := -1;
FillChar(SInfo,SizeOf(TSTartupInfo),0);
with SInfo do begin
cb := sizeof(TStartupInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := CmdShow;
end;
if not CreateProcess(nil, PChar(CmdLine),nil,nil,False,
NORMAL_PRIORITY_CLASS,nil,nil,SInfo,PInfo) then Exit;
if TimeOut > 0 then begin
if WaitForSingleObject(PInfo.hProcess, TimeOut) <> WAIT_OBJECT_0 then begin
TerminateProcess(PInfo.hProcess, 0);
Exit;
end
end else begin
WaitForSingleObject(PInfo.hProcess, INFINITE);
end;
GetExitCodeProcess(PInfo.hProcess, ExitCode);
Result := ExitCode;
end;
對我來說有什麼奇怪?
如果我不等待結束,那麼子程序運行時的性能與我在正常應用程序中運行時相同,因此我立即得到結果,並且窗口消失得很快。
但是,如果我等待客戶端的主人,我得到了15秒的延遲。
我登錄客戶端程序的時間,而15秒的傳遞與此DDE程序....
Delphi: DDE call from Indy TCPServer Thread
所以我不明白爲什麼WaitForS導致上調用ddelcient速度問題。可執行程序?
大師的WaitForS如何減緩子進程的dde調用?
你對這個問題有一些想法嗎?感謝您的任何信息,鏈接,建議!
+1非常好的答案 – 2013-02-25 22:14:57