WaitForSingleObject这个函数看得一头雾水啊高人们讲解下啊
解决方案 »
- dll调用,Form自动关闭?
- 请问设置a.exe不能直接运行?
- 怎么取文本文件中几段文字内容,这几段前后分别有乱码。(分给多了)
- 20分请教 ,如何在程序运行时增加dbgrid控件的显示字段﹐并将该字段关联某一数据集
- 找错
- 为何在打印机出现“Printer selected is not valid“
- memo中的文本怎么会自动分行?
- 串口编程实践问题,读地磅称重量数据
- 请问我的读取部分的代码有什么问题?
- 请教TTestProcedure = procedure(i: Integer) of object;中of object是 什么意思?有什么作用?
- 用indy8 的TidTCPServer做一个接收数据的服务端,我想把收到的数据在memo中同步显示出来,如何实现??
- 物价飞涨,拜托各位程序员找工作时把工资开高点,别把行情搞坏了,对大家没好处
HANDLE hHandle,
DWORD dwMilliseconds
);
WaitForSingleObject函数用来检测hHandle事件的信号状态,当函数的执行时间超过dwMilliseconds就返回,但如果参数dwMilliseconds为INFINITE时函数将直到相应时间事件变成有信号状态才返回,否则就一直等待下去,直到WaitForSingleObject有返回直才执行后面的代码。在这里举个例子:
给你一个示例代码
procedure TForm1.Button1Click(Sender: TObject);
function WinExecAndWait32(FileName: string; Visibility: integer): Cardinal;
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,
nil,
nil,
true,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo)
then Result := INFINITE
else
begin
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end;
begin
WinExecAndWait32_v1('c:\1.exe',0);
end;
function WinExecAndWait32(FileName: string; Visibility: integer): Cardinal;
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,
nil,
nil,
true,
CREATE_NEW_CONSOLE or
NORMAL_PRIORITY_CLASS,
nil,
nil,
StartupInfo,
ProcessInfo)
then Result := INFINITE
else
begin
WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, Result);
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end;
begin
WinExecAndWait32('c:\1.exe',0);
end;
HANDLE : hHandle,
DWORD : dwMilliseconds
);
等到句柄为Handle的操作结束后才继续执行,另外时间不能超过DWORD,否则就继续执行下面的语句
一共2个参数
第一个是对象的句柄
比如说用CreateProcess创建一个进程,然后把进程的句柄叫给WaitForSingleObject就可以让程序等待到创建的进程结束之后再继续执行
第二个是超时时间,单位是毫秒,如果想一直等待它执行下去 这里就填INFINITE.