怎么终止并释放一个正在运行的线程?调用什么函数!!???(300分)

  • 主题发起人 主题发起人 feifan
  • 开始时间 开始时间
F

feifan

Unregistered / Unconfirmed
GUEST, unregistred user!
由于一个线程实例做为一个类的字段来存取的如
TContainer = class
AThread : TThread;
....
public
constructor Create;
Destructor Destroy;
override;
end;
俺们想在这个类的Create方法中来创建实例!
{
construcotr TContainer.Create;
begin
AThread := TThread.Create(True);
end;
}
当调用Free函数时通过Destroy方法来释放这个线程实例!俺就不知道调用什么函数来
终止并释放一个线程实例?
{
destructor TContainer.Destroy;
begin
//怎么来终止AThread线程?并释放它?
end;
 
if (AThread <> nil) and (not AThread.terminated) then
begin
AThread.Terminate;
AThread.free;
end;
 
AThread.free;
 
一般要在 thread的execute中判断,
while not terminateddo
...
然后, 外面, thread.terminate;
線程是無法絕對安全的釋放的!!
 
AThread.Suspend;
AThread.Free;
 
TerminateThread
GetExitCodeThread获得exitcode
BOOL TerminateThread(
HANDLE hThread, // handle to thread
DWORD dwExitCode // exit code
);
这是强行终止线程,所占资源得不到安全释放
 
API:
TerminateThread(HANDLE, DWORD)和
CloseHandle(HANDLE);
 
是否可以这样:
AThread.FreeonTerminate:=false;
//关闭自动释放
AThread.Terminate;
//终止线程
if AThread.WaitFor=WAIT_OBJECT_0 then
//等待线程Terminate后释放
AThread.free
else
.... //EXCEPT
 
后退
顶部