?? 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 + -