创建多线程程序例子:利用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;