我是一名DELPHI的初学者,学习当中遇到了困难,有段代码不甚明白。恳请各位高手帮助,谢谢。
这段程序是关于用互斥使线程同步。代码如下:
if waitforsingleobject(hmutex,infinite)=wait_object_0 then
begin
...
end;releasemutex(hmutex)
//hmutex是互斥量。
我不明白的是:首先执行waitforsingleobject(hmutex,infinite)的线程拥有了信号量,而且是使信号量处于不发信号状态,而if语句是判断信号量处于发信号状态才执行begin...end之间的语句;那么begin...end之间的代码能执行吗,为什么?期待您的赐教。
这段程序是关于用互斥使线程同步。代码如下:
if waitforsingleobject(hmutex,infinite)=wait_object_0 then
begin
...
end;releasemutex(hmutex)
//hmutex是互斥量。
我不明白的是:首先执行waitforsingleobject(hmutex,infinite)的线程拥有了信号量,而且是使信号量处于不发信号状态,而if语句是判断信号量处于发信号状态才执行begin...end之间的语句;那么begin...end之间的代码能执行吗,为什么?期待您的赐教。
因为别的线程会改变hmutex的给一个例子,运行并等待程序结束
function TExecForm.Exec(FileName: string; Visibility: integer): integer;
var
zappname:array [0..512] of char;
zcurdir:array [0..255] of char;
workdir:string;
startupinfo:tstartupinfo;
processinfo:tprocessinformation;
exitcode:cardinal;
begin
strpcopy(zappname,filename);
getdir(0,workdir);
strpcopy(zcurdir,workdir);
fillchar(startupinfo,sizeof(startupinfo),#0);
startupinfo.cb:=sizeof(startupinfo);
startupinfo.wShowWindow:=visibility;
if not createprocess(nil,zappname,nil,nil,false,create_new_console or Normal_priority_class,
nil,nil,startupinfo,processinfo) then result:=-1
else begin
//等待程序结束
waitforsingleobject(processinfo.hProcess,infinite);
//程序结束时processinfo.hProcess将会改变
getexitcodeprocess(processinfo.hProcess,exitcode);
result:=exitcode;
end;
end;