孟雯先生:
终于上来了,不用发E-Mail了。
依我看,问题可能出在这里:(1)你在‘挂起’时,调用的方法
不对。从你的程序中,可以看出,你想在线程挂起后释放线程对象,
但你用的办法并不能释放线程对象,你可以看一下调试时的Thread
窗口。可以用以下方法:
Windows.TerminateThread(MyThread.Handle, 0);
MyThread.Free;
但由于使用TerminateThread是一种‘野蛮’的方法,在线程
中创建的对象你必须自己释放。
另外,线程的结束和线程的挂起是两个不同的概念。Delphi中
线程的Free方法,必须在线程结束后(即从Execute方法中退出)
才能调用成功,否则易引起混乱。
TThread和线程有联系,又有区别。
(2)两次调用MyThread := TDBQueryThread.Create(...)创建
的是两个不同的线程,他们之间也应使用同步,最好使用同步对象,
不要用Synchronize(...)。
由以上可知,出现你的错误是由于两个线程共用一个Session所致,
如果你想让两个同样的线程同时运行,他们各自必须有自己的Session,
否则,出现你的问题就不足为怪了。
(3)Query.Close方法的调用,应该在Destroy方法调用。