一个多线程的问题,这样做合理吗?(50分)

  • 主题发起人 主题发起人 luckystart
  • 开始时间 开始时间
L

luckystart

Unregistered / Unconfirmed
GUEST, unregistred user!
设计了一个终止所有线程的procedure,
合理吗?
不太懂waitforsingleobject之类的东西。
还有terminateThread是怎么用的呀?
procedure MyForm.FreeThreads;
var
I:integer;
MyThreadList:TList;
begin
MyThreadList:=ThreadList.LockList;
i:=MyThreadList.count-1;
while i>0do
begin
MultiThreads(MyThreadList).Terminate;
MyThreadList.delete(i);
Dec(i);
end;
MyThreadList.clear;
ThreadList.UnlockList;
end;
 
大侠们救命啊!!!
帮我提点意见呀!!!
 
TThread.Terminate并不会立即中止线程,只是告诉线程可以中止了。
另TTHREAD在FREE时会等待线程中止,而不会强制中止,所以你上面的程序如果
线程无法正常结束则会死掉,应该说不是很合理。
等待线程中止时会用到waitforsingleobject(并不是只能用它,还有其它方法),
当线程(或其它句柄)结束时它的状态会变为Single,否则会一直阻塞。此方法在
多线程中的共享资源的安全访问中常用,相当于告诉你某个资源对你是否是线程安
全的。
TerminateThread可以强制结束线程,但不会释放资源,比较危险,用法是
TerminateThread(Handle,ExitCode),Handle即线程句柄TThread.Handle,另一个
参数是线程返回值吧。
 
接受答案了.
 
后退
顶部