如何关闭线程(100分)

  • 主题发起人 主题发起人 zhujianzhou
  • 开始时间 开始时间
Z

zhujianzhou

Unregistered / Unconfirmed
GUEST, unregistred user!
我写了一个应用程序,在应用程序启动时启动两个线程,该线程包括一个ADOQuery对象和一个
自己写的类对象,但是为什么在应用程序关闭时总是提示我异步执行时,该操作不允许的错误提示
 
怎么,没有高手能回答我么
 
你在应用程序的关闭中加入application.Terminate;试试,Terminate对所有进程进行控制;
如不行,我试试后再告诉你。
 
你应该在程序关闭时,把线程的资源释放.设线程terminate可以,如果还不行的话,用closehandle()就可以
关闭相应的线程
 
没碰见过,关注一下。
另外下面问题中你的问题,我已回答(不全,请包涵):
http://www.delphibbs.com/delphibbs/dispq.asp?lid=750068
 
procedure TForm1.Button1Click(Sender: TObject);
var
H:THandle;
P:DWORD;
begin
H:=FindWindow(nil,'无标题 - 记事本');
if H<>0 then
begin
GetWindowThreadProcessId(H,@P);
if P<>0 then
TerminateProcess(OpenProcess(PROCESS_TERMINATE,False,P),$FFFFFFFF);
end;
end;
 
上述回答好像都不太安全,我自己试试其他的方法但发现好像有内存泄漏的事情,
执行几次以后就会出错,不行啊
 
使用API TERMINATEtHREAD
 
to system_owen
也不行啊
 
这应该是你的数据库线程所影起的问题, 你可以先试着不加数据库线程, 就应不会有这
样的问题, 如果这样, 那你的程序应不会每次都出错, 除非你的数据库线程, 总是在跑,
记住应确保数据库线程的数据处理任务完成后才能终止此线程, 否则, 一定出错, 其它
的线程你关不关应不会出错, 因为主线程OVER时会自动去KILL IT.
 
线程名.Suspend 停止
线程名.Resume 开始
 
不知楼主的两个线程里面是否用的循环。
如果里面是循环处理的话,设置一个全局变量quitFlag。
初始化quitFlag为False;
在执行关闭应用程序时先置quitFlag为True,然后判断quitFlag为False时应用程序关闭。线程里判断quitFlag为True时线程退出,线程退出时将quitFlag置为False。
哦,如果两线程,还得用两变量。
因为线程进行数据库操作,建议不要强行退出。
 
如果连歌线程同时操作数据库,每个线程要对应一个链接,两个线程同时操作就会出现异步操作错误;
程序关闭时,如果线程还在运行,那就要先关闭撤销线程。
Procedure KillThread;

procedure TThreadName.KillThread;
begin
TerminateThread(QT_Handle,ExitCode);
end;
QT_Handle:该线程的句柄,ExitCode味Dword类型(两个都是自定义变量)
 
后退
顶部