天软金融分析.NET函数大全 > TSL函数 > 第三方交互函数 > 外部交互扩展调用接口 > 多线程调用

多线程调用案例    

  •   创建多线程程序例子:利用windows API 的CreateThread函数创建多线程调用,通过控制台结束指定线程。
    代码如下:
    a:=array();
    //将abcd函数创建一个C调用的函数指针b
    b:=makeinstance(thisfunction(abcd),"cdecl",1);
    for i:=0 to 3 do
    begin
    //利用函数指针b调用操作系统函数创建线程。
    a[i][0]:=CreateThread(nil,10240000,b,nil,0,id);
    a[i][1]:=id;
    writeln("tid:",id," created");
    end

    while true do
    begin
      writeln("input exit to quit or input tid to exit thread");
      //从控制台读字符串
    s:=ReadLn();
      id:=trim(s);
    if id="exit" then break;
    //用全局缓存设置退出标识
    if length(select [1] from a where [1]=strtointdef(id,0) end) then setglobalcache(id,1);
    end;

    writeln("wait for exit....");
    setglobalcache("exit",1);

    for i:=0 to length(a)-1 do
    begin
    syswaitforsingleobject(a[i][0],-1);
    sysclosehandle(a[i][0]);
    end;

    return 1;
    //定义WindowsAPI的CreateThread函数声明。
    function CreateThread(attr:pointer;size:pointer;addr:pointer;p:pointer;flag:Integer;var threadid:Integer):pointer; external "kernel32.dll" name "CreateThread";
    function abcd(p:pointer):integer;
    begin
    tid:=systhreadid();
    //检查全局缓存的退出标识来结束线程。
      while not (getglobalcache("exit",v),v) and not (getglobalcache(inttostr(tid),v1)) do
      begin
        sleep(random(3000));
      end;
    writeln("\r\n tid:",tid, " done");
    return 1;
    end;