📄 multisearchthreadunit.pas
字号:
unit MultiSearchThreadUnit;
interface
uses Windows, Messages, SysUtils, Classes,ComCtrls,Dialogs;
type
TMultiSearchHostThread=class(TThread)
private
StartNum,GroupIndex,ImageIndex:integer;
tnode:TTreeNode;
GroupName:string;
protected
procedure Execute; override;
procedure GetTreeInfo;
Procedure AddGroup;
end;
TMainThread=class(TThread)
protected
procedure Execute; override;
Procedure EndSearch;
public
TimeOutValue: integer;
end;
implementation
uses main,SearchGroupThreadUnit;
procedure TMultiSearchHostThread.GetTreeInfo;
begin
with MainForm do
begin
ImageIndex:=SearchTree.Items[0].item[GroupIndex].ImageIndex;
tnode:=SearchTree.Items[0].item[GroupIndex];
GroupName:=tnode.Text;
end;
end;
procedure TMultiSearchHostThread.AddGroup;
begin
with MainForm do
begin
StatusBar.Panels[0].Text := '正在搜索工作组:'+GroupName;
end;
end;
procedure TMultiSearchHostThread.Execute;
var
i : integer;
searchers : array[1..100]of TSearchGroupThread;
bDo : array[1..100]of boolean;
begin
for i:=1 to 100 do bDo[i]:=false;
for i:=1 to ThreadNum do
begin
//if stop then exit;
if terminated then exit;
if StartNum+i < SearchCount then
begin
GroupIndex:=StartNum+i;
synchronize(GetTreeInfo);
if (ImageIndex <> 9) and(ImageIndex <> 16) then
begin
//gn:=AllGroups[start+i];
if terminated then exit;
//node:=treeview1.Items[0].Item[start+i];
Synchronize(AddGroup);
//if stop then exit;
if terminated then exit;
bDo[i]:=true;
searchers[i]:=TSearchGroupThread.create(true);
searchers[i].MyGroup := GroupName;
//searchers[i].choice :=0;
searchers[i].MyTree := MainForm.SearchTree;
searchers[i].mynode := tnode;
searchers[i].mynode.ImageIndex := 16;
searchers[i].mynode.selectedIndex := 16;
searchers[i].FreeOnTerminate := true;
searchers[i].Resume;
//if threadMode=0 then searchers[i].WaitFor; //单线程
end;
end else exit;
end; //end of for
//if threadMode=1 then
//begin
for i:=1 to ThreadNum do
if bDo[i] and (searchers[i]<>nil) then
begin
if not searchers[i].Terminated then
begin
{if OS <> osWinxp then searchers[i].WaitFor else }WaitForSingleObjectEx(searchers[i].Handle,INFINITE,true);
{if ver>4 then
begin
searchers[i].Terminate;
searchers[i].free //win98下free会出错。
end
else //searchers[i].Terminate;
TerminateThread(searchers[i].handle,0);}
end;
end;
//end;
end;
procedure TMainThread.EndSearch;
begin
with MainForm do
begin
ToolBtnAuto.Enabled := true;
ToolBtnRefresh.Enabled := true;
cbBegin.Enabled := true;
cbEnd.Enabled := true;
end;
end;
procedure TMainThread.Execute;
var
i : integer;
Multisearcherhost : TMultiSearchHostThread;
begin
i:=SearchBeginNum;
repeat
if stop then exit;
if terminated then exit;
Multisearcherhost:=TMultiSearchHostThread.create(true);
Multisearcherhost.StartNum := i;
Multisearcherhost.FreeOnTerminate := true;
Multisearcherhost.Resume;
//Multisearcherhost.WaitFor;
WaitForSingleObjectEx(Multisearcherhost.Handle,TimeOutValue{INFINITE},true);
i:=i+ThreadNum;
until i>= SearchCount;
synchronize(EndSearch);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -