⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multisearchthreadunit.pas

📁 vpn网上邻居搜索器 工作组 未打开的工作组 正在搜索的工作组 已打开的工作组 无法打开的工作组 主机 未打开的主机 正在搜索的主机 打开的主机(无须登录) 打开的主机(以gues
💻 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 + -