多线程问题+怎样识别线程 ( 积分: 50 )

  • 主题发起人 主题发起人 yngxs
  • 开始时间 开始时间
Y

yngxs

Unregistered / Unconfirmed
GUEST, unregistred user!
SendThread:=TSendSort.Create;
SendThread:=TSendSort.Create;
SendThread:=TSendSort.Create;
同一个线程我创建了三次,现在我想停止其中一个线程,但是我不知道怎么
去区分这三个线程.
谁能帮帮我,谢谢!
 
SendThread:=TSendSort.Create;
SendThread:=TSendSort.Create;
SendThread:=TSendSort.Create;
同一个线程我创建了三次,现在我想停止其中一个线程,但是我不知道怎么
去区分这三个线程.
谁能帮帮我,谢谢!
 
关注
我没做过...但我有个想法
每个线程都发给主程序消息,把自己的句柄信息传给主程序.
主程序根据获得消息中的句柄,决定中止哪一个....
 
SendThread:=TSendSort.Create;
SendThread:=TSendSort.Create;
SendThread:=TSendSort.Create;
起码两个对象内存没有得到释放!
你可以定义三个对象变量这不就区分开了!
 
SendThread:=TSendSort.Create(1);
SendThread:=TSendSort.Create(2);
SendThread:=TSendSort.Create(3);
在线程类中加一个ID的public变量,继承Create方法将id值传进去,就可以了
if sendthread.id=1 then
sendthread.terminte;
还有就是你可以判断线程本身的threadID.
 
yanghai0437,你的第一种方法我试过了行不通,我想sendthread.id最后应该等于3把
第二种方法只能停最后一个创建的线程
 
谁帮帮我,难道没有人能解决吗
 
晕!你不会定义一个数组呀?只定义一个变量,后面的创建赋值不把前面的冲掉了?你还到哪去找前面两次创建的线程对象?
var SendThread: array[0..2] of TThread;
SendThread[0] := TSendSort.Create(1);
SendThread[1] := TSendSort.Create(2);
SendThread[2] := TSendSort.Create(3);
如果线程个数不定,那就用动态数组或者TList呗
 
用线程数组保存和区别不同线程
//启动
while(index<=count)do
begin
if (FDataThread[index]= nil) then
begin
FDataThread[index] := TClientDataThread.Create(false,FClientThread,tmpStr,index);
TransServer.ShowMsg(clBlue,'向客户端输出第%d线程启动!ThreadId=%d!',[index,FDataThread[index].ThreadID]);
end;
inc(index);
end;

//停止多线程发送
while(index <= count)do
begin
if FDataThread[index]<>nil then
begin
FDataThread[index].Terminate;
FDataThread[index].WaitFor;
TransServer.ShowMsg(clBlue,'向客户端输出第%d线程已停止!ThreadId=%d,发送条数=%d,接收应答条数=%d',
[index,FDataThread[index].ThreadID,SndNum[index],RecvNum[index]]);
FDataThread[index].Free;
FDataThread[index] := nil;
end;
inc(index);
end;
 
多人接受答案了。
 
后退
顶部