如何创建多个相同线程(200分)

  • 主题发起人 主题发起人 ioi2000
  • 开始时间 开始时间
I

ioi2000

Unregistered / Unconfirmed
GUEST, unregistred user!
如何创建多个相同线程
我的程序是这样的:当收到请求时,自动创建一个线程处理问题,当问题解决后回收线程用过的空间。
问题是如何在线程自己结束时释放自己,并且通知主线程(程序本身)这个线程已经处理完毕。
还有就是,如果有数组储存这些线程,下一个要快速获得一个空闲的线程,岂不是每一次都要对整个数组扫描一次。
 
procedure TXXThread.Execute;
begin
FreeOnTerminate := True;
//add your code here.
//when thread terminate,FreeOnTerminate will clear res automatically
end;
 
FreeOnTerminate := True;
表示线程执行完毕后,自动释放占用资源
 
unit unit2;
interface
uses classes,windows,sysutils;
type tmythread=class(tthread)
protected
procedure execute;override;
end;
implementation
procedure tmyThread.Execute;
begin
sleep(3000);
FreeOnTerminate := True;
messagebox(0,'想干什么?','做你的事情!',mb_ok);
//do
某些事情
end;
end.
引用这个单元,然后再主窗体的一个按钮写下:
tmythread.Create (false);
 然后在程序程序时,对着这个窗体的按钮一连按三下,瞧瞧看!
是不是,一连出现了三个对话框???
这不就是三个线程在运行嘛!
注意快点给分啦!
 
应该可以有至少两种方法
1.Execute结束的时候将自己设成nil,主线程则可根据线程数组的每个元素是否为NIL来
判断哪些线程结束了。
2.Execute结束的时候发送给主线程(通常是窗口)一个自定义的消息,消息内包含线程在数组中的索引,例如
CONST WM_THREAD_FINISH = WM_USER + 1;
SendMessage(Form1.Handle, WM_THREAD_FINISH, Self.Index, 0);
用数组储存这些线程应该没有问题的,扫描一遍非常快。
 
也可以用TList建立线程队列,从而可以维护该线程队列
 
后退
顶部