天软金融分析.NET函数大全 > TSL函数 > 资源访问函数 > 进程相关函数

SysWaitForMultipleObjects    

简述
等待占有多个对象,例如互斥对象。支持windows和linux的进程
定义
SysWaitForMultipleObjects(Objects:Array of Integer;bWaitAll:Boolean;WaitMs:Integer):Ingeger;
参数
名称类型说明
ObjectsArray of Integer一维数字数组,对象句柄数组
bWaitAllBoolean真假,是否等待所有的对象。为真等待所有的,为假则仅需任意一个对象等待成功。
WaitMsInteger整数,等待的毫秒数,-1则为永远等待。
返回Ingeger返回值对应如下:
返回代码 描述
0到 对象个数-1 如果bWaitAll为TRUE,那么返回值表明所有指定对象在调用期间发出了对象信号。 如果bWaitAll为FALSE,那么返回值表明引起函数返回的对象的Objects数组索引。如果多于一个对象发出了信号,则返回的是数组索引最小的信号态对象索引。
128 到 (128+对象个数-1) 如果bWaitAll为TRUE,那么返回值表明所有指定对象的状态为信号态,并且至少一个对象是己放弃的互斥对象。 如果bWaitAll为FALSE,那么返回值减去128表明引起函数返回的放弃互斥对象的Objects数组索引, 该索引满足等待。 互斥对象所有权授予调用线程,互斥体设置为非对齐。 如果互斥体保护持久状态信息,则应检查它是否一致性。
258 超时并且由参数bWaitAll指定的条件没有满足
-1 调用失败。要获取扩展的错误信息,请调用sysGetLastError
  • 范例

       SysexecNewpipe(); //创建管道
       path:="D:\\TinySoftNG\\AnalyseNG.NET\\TSL.exe";
       doS1:=array('C:\\TinySoftNG\\AnalyseNG.NET\\tsl.exe','C:\\DoTSL\\otherTest\\TestEnv.tsl');
       doS2:=array('C:\\TinySoftNG\\AnalyseNG.NET\\tsl.exe','C:\\DoTSL\\otherTest\\TestEcho.tsf');
       //创建一个被挂起的进程,两个会返回的进程
       hand1:= SysExec(path,'TSL',nil,array('wait':false,'in':'c:="333"\r\n'),code);
       hand2:= SysExec(path,doS1,nil,false,code);
       hand3:= SysExec(path,doS2,nil,false,code);
       r:=SysWaitForMultipleObjects(array(hand1,hand2,hand3),0,10*1000);// 仅需任意一个对象等待成功
       t:=SysexecReadpipe();//读取管道内容
       SysTerminate(code,hand1);//终止进程
       SysTerminate(code,hand2);//终止进程
       SysTerminate(code,hand3);//终止进程
       return array(r,t);
    返回:返回为1,说明hand1没有等待成功,而至少hand2是有等待成功了。注:其中的TestEnv.tsl与TestEcho.tsf实现分别如下:TestEnv.tsl:
    sleep(500);t:=Sysgetenvs();echo "sys: ",tostn(t),'\r\n';return 1;
    TestEcho.tsf:
    sleep(2*1000);//停2秒echo 'TestEchoIN\r\n';return 1;
    参考
    SysExec、SysWaitForSingleObject 
相关