紧急救助:关于线程的终止!

ricesoft 2002-04-19 10:29:15
我写的一个的线程TMyThread(从TThread继承)。它的执行体如下:
try
IdClient.Connect;
{.............................
//循环读取直到Terminated
并对读取的内容做分析处理
............................}
while IdClient.Connected do
begin
if Terminated then Break;
try
Command:=IdClient.ReadLn('',500);
Except
//Do Something!
Exit;
end;

//DO Something About command;
end;
finally
if IdClient<> nil then
begin
if IdClient.Connected then
begin
IdClient.Disconnect;
end;
IdClient.Free;
IdClient:=nil;
end;
end;

其中的IdClient是在线程创建时创建的一个TIdTCPClient的实例!

然后我在外部创建了一个线程实例m_thread;
在销毁这个线程时,我写了:
m_thread.Resume;
m_thread.Terminate;
Sleep(1000);
m_thread.waitfor;
m_thread.free;
m_thread:=nil;

但是执行到m_thread.waitfor的时候就停了,一直等待着线程的终止。

请问有什么好的办法销毁这个线程?
用TerminateThread? 该这么用?
谢谢

...全文
51 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
GreenWaterBlueSky 2002-04-19
  • 打赏
  • 举报
回复
不明白,你既然让它等待,那它自然是等待了,那怎么又要销毁它,在哪销毁呢
ricesoft 2002-04-19
  • 打赏
  • 举报
回复
to greenwaterbluesky(碧水蓝天我的家):
我用m_thread.Terminate设置了Terminated为true;
这样在线程的执行体里,应该就会跳出循环的,然后就自然销毁了呀!


现在问题答案已经找到了,是Break这句并没有跳出循环。
我把while语句改成:
while (not Terminated) and IdClient.Connected do
就行了。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧