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

📄 unitscanmodemstatusthread.pas

📁 串口短信猫收发软件。支持西门子TC35i设备
💻 PAS
字号:

{*******************************************************}
{                                                       }
{  名称:TScanModemStatusThread类                       }
{  功能:                                               }
{      1.检测通讯设备状态线程                           }
{  调用:                                               }
{      1.随主窗体创建,按启动按钮后开始执行             }
{*******************************************************}

unit UnitScanModemStatusThread;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, ComCtrls, RzTray, UnitPublicFun, UnitModemPool, UnitModem;

type
  TScanModemStatusThread = class(TThread)
  private
    FSleepInterval: integer;  
    FMPool: TModemPool;  
    FErrorType, FCommName, FDoType, FMsg: string;    
    FAfterProcessing: TAfterProcessingEvent;
    FShowMsg: TShowMsgEvent;
    FMsgList: TStrings;
    procedure CallAfterProcessing;
    procedure CallShowMsg;
    procedure ScanModemStatus;
  protected
    procedure Execute; override;
    procedure DoAfterProcessing;
    procedure DoShowMsg;
  public
    constructor Create(MPool: TModemPool; CreateSuspended: Boolean; SleepInterval: integer);
    destructor Destroy; override;
    property AfterProcessing: TAfterProcessingEvent read FAfterProcessing write FAfterProcessing;
    property ShowMsg: TShowMsgEvent read FShowMsg write FShowMsg;
  end;

implementation

{ TScanModemStatus }

procedure TScanModemStatusThread.DoAfterProcessing;
begin
  if Assigned(FAfterProcessing) then Synchronize(CallAfterProcessing);
end;

procedure TScanModemStatusThread.CallAfterProcessing;
begin
  if Assigned(FAfterProcessing) then
    FAfterProcessing(Self, DOSCANMODEMSTATUS, FMsgList);
end;

constructor TScanModemStatusThread.Create(MPool: TModemPool;
  CreateSuspended: Boolean; SleepInterval: integer);
begin
  FMPool := MPool;
  FSleepInterval := SleepInterval;
  FreeOnTerminate := True;
  FDoType := DOTYPE_SCANMODEMSTATUS;
  FMsgList := TStringList.Create;
  inherited Create(CreateSuspended);
end;

destructor TScanModemStatusThread.Destroy;
begin
  FMsgList.Free;
  inherited;
end;

procedure TScanModemStatusThread.Execute;
begin
  while not Terminated do
  begin
    try
{    
      FErrorType := '';
      FCommName := DOTYPE_SCANMODEMSTATUS;
      FMsg := '开始检测通讯设备状态...';
      DoShowMsg;
}
      ScanModemStatus;
{
      FErrorType := '';
      FCommName := DOTYPE_SCANMODEMSTATUS;
      FMsg := '结束检测通讯设备状态!';
      DoShowMsg;
}
      Sleep(FSleepInterval);
    except
      continue;
    end;
  end;
end;

procedure TScanModemStatusThread.CallShowMsg;
begin
  if Assigned(FShowMsg) then
    FShowMsg(Self, FErrorType, FCommName, FDoType, FMsg);
end;

procedure TScanModemStatusThread.DoShowMsg;
begin
  if Assigned(FShowMsg) then Synchronize(CallShowMsg);
end;

procedure TScanModemStatusThread.ScanModemStatus;
var
  i: integer;
  m: TModem;
begin
  FMsgList.Clear;
  for i:=0 to FMPool.ModemList.Count-1 do
  begin
    m := FMPool.LookupNameModem(FMPool.ModemList.Strings[i]);
    if m=nil then continue;
    FMsgList.Add(m.CommName);                                                   //0-通讯端口名称
    FMsgList.Add(m.GetNetSignal);                                               //1-网络信号接收强度
    FErrorType := '';
    FCommName := m.CommName;
    FMsg := '获取设备运行状态...';
    DoShowMsg;
  end;
  DoAfterProcessing;//触发主窗体调用事件
end;

end.

⌨️ 快捷键说明

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