Test程序的小问题(50分)

  • 主题发起人 主题发起人 liangtianyi
  • 开始时间 开始时间
L

liangtianyi

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在一个程序调用另一个程序并且在规定时间内运行完,
超时的话就要把调用的程序中止了,还有一定要等程序运行结束后在执行下面的东东,
要加什么语句[:(]
谢谢
 
用这个实现等程序运行结束后在执行下面的东东。
function WinExecAndWait32_v1(FileName: string
Visibility: integer):
Cardinal
{integer}
var
zAppName: array[0..512] of char

zCurDir: array[0..255] of char

WorkDir: string

StartupInfo: TStartupInfo

ProcessInfo: TProcessInformation

begin
StrPCopy(zAppName, FileName)

GetDir(0, WorkDir)

StrPCopy(zCurDir, WorkDir)

FillChar(StartupInfo, Sizeof(StartupInfo), #0)

StartupInfo.cb := Sizeof(StartupInfo)

StartupInfo.dwFlags := STARTF_USESHOWWINDOW

StartupInfo.wShowWindow := Visibility

if not CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process security attributes }
nil, { pointer to thread security attributes }
true, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name, PChar}
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) { pointer to PROCESS_INF }
then Result := INFINITE {-1} else
begin
WaitforSingleObject(ProcessInfo.hProcess, INFINITE)

GetExitCodeProcess(ProcessInfo.hProcess, Result)

CloseHandle(ProcessInfo.hProcess)
{ to prevent memory leaks }
CloseHandle(ProcessInfo.hThread)

end

end

如果你定时2分钟,就可以在另一个程序里加入一个timer,在onshow时把tiemr打开,
timer的时长定为120000,在ontimer里加入close;
OK了。
 
定时器可行。没有试验过。得试试先!
 
同意truecat
 
修改一下楼上的代码,
WaitforSingleObject(ProcessInfo.hProcess, INFINITE)

可以改为定时的,第二个参数设为时间数就是了,然后判断返回值,
用不着timer的。
 
谢谢,不过,如何控制时间呢?
能否请shangshang说具体点,谢谢[:)]
 
已两分钟为例
var
ret:Dword;
ret:=WaitforSingleObject(ProcessInfo.hProcess, 120000)

if ret=WAIT_TIMEOUT then showmessage('超时');
if ret=WAIT_OBJECT_0 then showmessage('success!')
 
谢谢,我先给你们加上分数吧,我要军训去了[:(]
不过我的意思不是这个,我是指在规定时间内结束程序,这种方法不能结束程序
你能否告诉我,谢谢
我的EMail是: liangtianyi@163.net
[:)]
 
后退
顶部