问个关于多线程的。。。。
定义了一个查找文件的线程
在 Execute 事件中用 findfirst 等函数查找指定目录下的文件
如:
constructor Create;
begin
inherited Create(False);
FreeOnTerminate:=True;
end;
procedure Execute;
begin
DoSearch(Path);
end;
然后同时创建多个线程
var list : TStringlist;
FThreadList : Tlist;
for i := 0 to 5 do
begin
FThreadList.Add(TSearchThread.Create);
end;
但我要停止全部线程时,它其实没有停掉
procedure FreeThread;
begin
for i := FThreadList.Count - 1 downto 0 do
begin
TSearchThread(FThreadList[i]).Terminate;
TSearchThread(FThreadList[i]).WaitFor; //报无效句柄错误
end;
end;
挂起
procedure FreeThread;
begin
for i := FThreadList.Count - 1 downto 0 do
begin
if not TSearchThread(FThreadList[i]).Suspended then
TSearchThread(FThreadList[i]).Suspend;//报无效句柄错误
end;
end;
唤醒
procedure FreeThread;
begin
for i := FThreadList.Count - 1 downto 0 do
begin
if TSearchThread(FThreadList[i]).Suspended then
TSearchThread(FThreadList[i]).Resume;
end;
end;
procedure DoSearch;
begin
if findfirst() <> 0 then
begin
repeat
//在此处加了 ,但并不起作用
if Terminated then break;
alist.add(path + sr.name)
until findnext(sr) = 0 ;
end;
end;
现在的问题是
(1) :线程没有停止
(2) : 挂起线程时,报无效句柄错误
不知道怎么用多线程......-_-