{==========================================================================}
我把线程类放在另一个单元文件中
constructor TCalScoreThread.Create(createSuspended: boolean; obj: TRna);
begin
freeOnTerminate:=true;
inherited create(createSuspended);
end;procedure TCalScoreThread.Execute; //在线程中进行计算序列分数
begin
{ Place thread code here }
TRna.calScore;
end;
{==========================================================================}
// 另一个单元中使用线程类
procedure TUseTh.ThreadCal; //开始线程
begin
calThread:=TCalScoreThread.Create(false,self); //创建线程对象,马上执行
calThread.OnTerminate:=OnCaled; //结束线程时触发事件
end;TUseTh.AbortTh //终止线程
begin
calThread.Terminate; //终止线程
end;
{==========================================================================}可是我发现我调用 TUseTh.AbortTh 后,线程还是继续着?
如何终止线程? 不是用Termainate吗?谢谢
我把线程类放在另一个单元文件中
constructor TCalScoreThread.Create(createSuspended: boolean; obj: TRna);
begin
freeOnTerminate:=true;
inherited create(createSuspended);
end;procedure TCalScoreThread.Execute; //在线程中进行计算序列分数
begin
{ Place thread code here }
TRna.calScore;
end;
{==========================================================================}
// 另一个单元中使用线程类
procedure TUseTh.ThreadCal; //开始线程
begin
calThread:=TCalScoreThread.Create(false,self); //创建线程对象,马上执行
calThread.OnTerminate:=OnCaled; //结束线程时触发事件
end;TUseTh.AbortTh //终止线程
begin
calThread.Terminate; //终止线程
end;
{==========================================================================}可是我发现我调用 TUseTh.AbortTh 后,线程还是继续着?
如何终止线程? 不是用Termainate吗?谢谢
解决方案 »
- 又是用DELPHIL调用DB文件的问题
- 请教DBNavigator数据集中的图片记录在image中显示的问题,多谢帮忙!!求助!!!
- 引用的单元中有相同名称的函数怎么办?
- sql server 中存储过程是否会发生冲突?
- listbox问题....求解........5555555
- ★★★★★★forgot昨晚被一个MM暴扁了一顿,强烈郁闷中......★★★★★★
- 一个word文档存入sql server 数据库中
- delphi命令行自动编译DCC32使用方法
- 在sql server中,如何创建一个字增自段?(最好用可视化方法!)
- Tregistry的使用
- 关于一个简单的编译出错!
- 【请教】关于DBEdit和DBText ◎小弟就这点分了,请大哥们见量◎
TUseTh.AbortTh //终止线程
begin
if calThread <> nil then
calThread.Terminate; //终止线程
end;
不过这句话,,,会不会...
calThread.OnTerminate:=OnCaled; //结束线程时触发事件
或者用派生类的execute
begin
inherited create(createSuspended);
freeOnTerminate:=true; //放在上面不好吧。还是放在下面看着舒服。
end;
线程的Terminate过程其实只是对线程作了一个标志量,对线程正在处理的事情并没有影响!
要让线程在Terminate后立即停掉,只能在execute方法中不停的判断是否Terminated。
估计楼主的线程在TRna.calScore过程中花耗时间较长,但该过程中并没有判断是否Terminated,所以线程还是自己干自己的事儿
要强制关闭就用TerminateThread这个API