📄 unitscanmodemstatusthread.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 + -