关于如何结束线程问题。 ( 积分: 100 )

  • 主题发起人 主题发起人 楞头青
  • 开始时间 开始时间

楞头青

Unregistered / Unconfirmed
GUEST, unregistred user!
在程序中建立了一个线程,调用一个dll中的函数。
procedure Thread.Execute;
begin

DTransferPath();
end;

在正常条件下 ,结束线程要在Execute中根据FTerminated条件操作
,问题是DTransferPath 要执行很长时间才跳出来,没法进行FTerminated判断。
有什么安全有效的方法么,谢谢大家。
 
在程序中建立了一个线程,调用一个dll中的函数。
procedure Thread.Execute;
begin

DTransferPath();
end;

在正常条件下 ,结束线程要在Execute中根据FTerminated条件操作
,问题是DTransferPath 要执行很长时间才跳出来,没法进行FTerminated判断。
有什么安全有效的方法么,谢谢大家。
 
可能的话在 DTransferPath 过程中 判断 FTerminated属性,在DTransferPath
执行的一些关键点判断,为True的话就清场退出。
 
强制关闭线程就行了:
Windows.TerminateThread(Thread.handle)
 
DTransferPath();是第三方函数,不能改
Windows.TerminateThread(Thread.handle) 实验过了没用,
邪的是,关闭程序时主窗口关了,线程还在运行,要在任务管理器关闭才行。
 
Windows.TerminateThread(Thread.handle) 这个函数绝对能把线程杀死。不然windows就不叫windows了
你的问题应该是DTransferPath里面又新建了线程造成的。
要退出程序,TerminateProcess就行了。
delphi中用Halt(ExitCode)也行
 
我也遇到过这种问题
 
你说对了,我又试了一下,应该是DTransferPath里面又新建了线程造成的。
退出用的是Application.Terminate;
Halt(1)也试过了, 没用 。
有什么解决办法啊。
 
Application.Terminate是绝对不行的,它只不过给Application发了一个wm_quit消息而已。
Windows.TerminateProcess是肯定可以的。
Halt居然不行,我也很好奇,可能Halt还是只中止了当前线程。
 
试过了 windows.TerminateProcess(GetCurrentProcess,0);
运行线程时,连窗口都关不掉。
 
解决了,不用windows.TerminateProcess(GetCurrentProcess,0);
直接用 TerminateProcess(GetCurrentProcess,0);
谢 sweetgun 帮忙。
那个线程问题怎么办呵。
 
DTransferPath谁写的,谁去解决呗。呵呵。
 
晕,这个是作为产品购买的,不包含原码。
 
后退
顶部