读书人

怎样停止线程解决方法

发布时间: 2012-02-19 19:43:38 作者: rapoo

怎样停止线程
线程内容:
while true do
begin
form1.Memo1.Lines.Add(formatdatetime( 'yyyyMMdd:hhmmss ',now()));
sleep(500);
end;

主线程停止语句:
线程.Suspended
线程.free

执行以后程序就死了,怎么回事

[解决办法]
procedure TMyThread.Execute;
begin
Self.FreeOnTerminate := False;
while not Self.Terminated do
begin
.......
end;
end;


停止线程并等待线程
MyThread.Terminate;
MyThread.WaitFor;



[解决办法]
MyThread.Terminate;
这样结束线程,资源会自动释放吗

==================================================================

1. 在TMyThread的Destroy事件中,用代码释放TMyThread使用的资源。

2.在MyThread创建的时候, 设置FreeOnTerminate为True,使得线程终止时线程变量能被释放,例如:
MyThread := TMyThread.Create(True); //Suspended := True
with MyThread do
begin
FreeOnTerminate := True;
Resume;
end

[解决办法]
马上停的话会有问题的,不知道你要用来做什么的,但是可以把线程挂起Suspend可以让他停止下来,唤醒后继续上次的执行。
[解决办法]
waitfor

[解决办法]
线程里不能直接去操作界面元素.
[解决办法]
可以使用下面的代码强行终止线程:
TerminateThread(mythread.Handle,1);
CloseHandle(mythread.Handle);

不过不建议使用这种方法,容易造成资源不能正确释放
最好让线程类自己去执行中止代码
[解决办法]
mythread.Suspend

读书人网 >.NET

热点推荐