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

📄 mythreadpool.pas

📁 ThreadPro 是本人开发的一套用于多线程编程的 Delphi 基础类库
💻 PAS
字号:
unit MyThreadPool;

interface

uses
  SysUtils, ThreadPool, MyHTTPtask, ThreadTask;

type
  {used in demo1}
  TThreadPoolDemo = class(TThreadPool)    ///普通任务线程池类从  TThreadPool 继承即可
  protected
    procedure SetThread(ThreadIndex : Integer; Task : Pointer);override;  //通常情况下你只需要覆盖父类中的这个方法即可
  public
    P_OnLvTraceLog : TLvTraceLogNotifyEvent;
    P_OnTraceLog : TTraceLogNotifyEvent;
  end;

  {用于验证代理的HTTP线程池类  used in demo2}
  TCheckProxyPool = class(THTTPtaskPool)    //创建HTTP线程池请从 THTTPtaskPool 继承
  protected
    procedure SetThread(ThreadIndex : Integer; Task : Pointer);override;  
  public
    P_OnLvTraceLog : TLvTraceLogNotifyEvent;
    P_READ_TIME_OUT : Integer;
    P_TARGET_URL : string;
    P_SUCC_STR : string;
  end;

  {used in demo3}
  TWebSearchPool = class(THTTPtaskPool)
  protected
    procedure SetThread(ThreadIndex : Integer; Task : Pointer);override;
    procedure CreateThread(ThreadIndex : Integer ; Task : Pointer);override;    //demo3中多覆盖了父类中的一个方法,因为我们需要使用多态
  public
    P_OnSrhRetFind : TSrhRetFindEvent;
    P_KEY_WORD : string;
    P_PAGE_NUM : Integer;
  end;

implementation

uses
  Main, Define;

{TThreadPoolDemo}
procedure TThreadPoolDemo.SetThread(ThreadIndex : Integer; Task : Pointer);
var
  TaskObj : PTaskObj;
begin
  with TThreadTaskDemo(_THREADS[ThreadIndex]) do
  begin
    TaskObj := PTaskObj(Task);
    _PARAM := PDemoParam(TaskObj^.Param)^.Relay;   //设置延时
    _OnTraceLog := P_OnTraceLog;       //ListBox 方式状态跟踪事件
    _OnLvTraceLog := P_OnLvTraceLog;   //Listview 方式状态跟踪事件  (用于在界面上显示每个线程的状态)
  end;
end;

{TCheckProxyPool}
procedure TCheckProxyPool.SetThread(ThreadIndex : Integer; Task : Pointer);
var
  TaskObj : PTaskObj;
begin
  inherited;             //从 THTTPtaskPool 继承别忘了加上这句
  with TCheckProxy(_THREADS[ThreadIndex]) do
  begin
    TaskObj := PTaskObj(Task);
    _USE_PROXY := True;
    _PROXY_ADDR := StrPas(PCheckProxyParam(TaskObj^.Param)^.IP);   //代理IP
    _PROXY_PORT := PCheckProxyParam(TaskObj^.Param)^.Port;         //代理端口
    _CONN_TIME_OUT := 5000;          //连接超时,即DNS解析超时,这里我们设置为固定的5秒
    _OnLvTraceLog := P_OnLvTraceLog;   //Listview 方式状态跟踪事件  (用于在界面上显示每个线程的状态)
    _READ_TIME_OUT := P_READ_TIME_OUT; //HTTP请求超时
    _TARGET_URL := P_TARGET_URL;       //目标验证网址
    _SUCC_STR := P_SUCC_STR;           //成功字串
  end;
end;

{TWebSearchPool}
procedure TWebSearchPool.SetThread(ThreadIndex : Integer; Task : Pointer);
var
  TaskObj : PTaskObj;
begin
  inherited;
  with TWebSearch(_THREADS[ThreadIndex]) do
  begin
    TaskObj := PTaskObj(Task);
    _TASK_INDEX := TaskObj^.Index;
    _KEYWORD := P_KEY_WORD ;
    _PAGE_COUNT := P_PAGE_NUM;
    _READ_TIME_OUT := 5000;
    _CONN_TIME_OUT := 5000;
    _OnSrhRetFind := P_OnSrhRetFind;
  end;
end;

procedure TWebSearchPool.CreateThread(ThreadIndex : Integer ; Task : Pointer);
var
  TaskObj : PTaskObj;
  EngineSite : TWebEngine;
begin
  with TWebSearch(_THREADS[ThreadIndex]) do
  begin
    TaskObj := PTaskObj(Task);
    EngineSite := PWebEngineObj(TaskObj^.Param)^.Site;
    //来体会一下多态的奥妙,现在TWebSearchPool能运行完全不同的任务,而不仅仅是任务参数不同而已
    case EngineSite of
      weGoogle    : _THREADS[ThreadIndex] := TGoogleSearch.Create;
      weBaidu     : _THREADS[ThreadIndex] := TBaiduSearch.Create;
      weYahoo     : _THREADS[ThreadIndex] := TYahooSearch.Create;
      weSina      : _THREADS[ThreadIndex] := TSinaSearch.Create;
      weSogou     : _THREADS[ThreadIndex] := TSogouSearch.Create;
      weZhongSou  : _THREADS[ThreadIndex] := TChinaSearch.Create;
    end;
  end;
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -