FAQ > 金融建模 > 第三方交互 > 其他

Q:如何通过代码的方式使用任务管理命令    

  • A:任务管理主要是对登录的账号、执行的在线任务或委托执行的任务进行查看或者终止任务等操作。
    详细说明:FAQ:Q:任务管理说明
      天软提供模型TSTaskAdmin可直接发送任务管理命令
    函数说明:
    定义:TSTaskAdmin(Command:String;CmdReturn,BroadCastMsg,ErrMsg:String;[WaitMs,DataRecvedWaitMs:Integer]):Integer
    说明:向天软平台发送管理命令。本地函数调用时需要加上RDO2
    参数:
      Command:字符串类型,送入的命令串
      CmdReturn:返回字符串类型的命令返回。
      BroadCastMsg:返回在命令期间接收到的广播消息。
      ErrMsg:如果发生错误,返回错误的信息串。
      WaitMs:等待信息的毫秒数,可省略。
      DataRecvedWaitMs:当数据已经有接收到,等多多少毫秒则结束等待。
    返回:0,参数CmdReturn、BroadCastMsg返回相关命令的结果。

    使用范例:
    调用ou命令查看当前登陆情况

        ret:= rdo2 TSTaskAdmin("ou",CmdReturn,BroadCastMsg,ErrMsg,3000,1000);
        return CmdReturn;


    调用oa命令查看当前并发情况(程序执行)情况

        ret:= rdo2 TSTaskAdmin("oa",CmdReturn,BroadCastMsg,ErrMsg,3000,1000);
        return CmdReturn;


    调用info命令查看当前账号使用情况

        ret:= rdo2 TSTaskAdmin("info",CmdReturn,BroadCastMsg,ErrMsg,3000,1000);
        return CmdReturn;


    获取当前账号的登录数及并发数的使用情况

    执行代码:
        ret:= rdo2 TSTaskAdmin("ou",CmdReturn,BroadCastMsg,ErrMsg,3000,1000);
        info :=CmdReturn;
        return array("已登录用户数":getusers(info),
                     "在线执行个数/可在线执行个数":getConcurrency(info)["OLTASK"]);
    执行结果:


    调用子函数1:getusers
    function getusers(info);
    begin
        ParseRegExpr("(\\d+).*online",info,"",result,MPos,Mlen);
        for i in result do users+=StrToInt(result[i,1]);
        return users;
    end

    调用子函数2:getConcurrency
    function getConcurrency(info);
    begin
        info_t:=str2array(info,"\r\n");
        key:=str2array(info_t[0]," ");
        value:=str2array(info_t[1]," ");
        k:=array();
        v:=array();
        for i in key do
            if key[i] <> "" then
                AppendArray(k,key[i]);
        for i in value do
            if value[i] <> "" then
                AppendArray(v,value[i]);

        s:=0;
        len:=length(v);
        for i:=0 to len-1 do
        begin
            NI:=i-s;
            if rightStr(v[NI],1)="/" then
            begin
                v[NI]+=v[NI+1];
                deleteindex(v,NI+1);
                s+=1;
            end
        end
        
        rt:= array();
        for i in k do
            rt[k[i]]:=v[i];
        return rt;
    end