怎样停止线程
线程内容:
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