filesysthread.pas

来自「在delphi中实现windows核心编程.原书光盘代码核心编程.原书光盘代码」· PAS 代码 · 共 71 行

PAS
71
字号
unit FileSysThread;

interface

uses
    Windows, SysUtils, Classes, comctrls;

type
    TFileSysNotifyThread = class(TThread)
    private
        ErrCode: Integer;
        KillAddress: PInteger;
        NotifyHandle: THandle;
        WatchPath: String;
        WatchMask: Integer;
        procedure SignalFileNotification;
    protected
        procedure Execute; override;
    public
        constructor Create (const AWatchPath: String; AWatchMask: Integer; var Myself: TFileSysNotifyThread);
        destructor Destroy; override;
    end;

implementation

uses Dialogs;

constructor TFileSysNotifyThread.Create (const AWatchPath: String; AWatchMask: Integer; var Myself: TFileSysNotifyThread);
begin
    Inherited Create (True);
    WatchPath := AWatchPath;
    WatchMask := AWatchMask;
    KillAddress := Addr (Myself);
    Priority := tpLower;
    FreeOnTerminate := True;
    Suspended := False;
end;

destructor TFileSysNotifyThread.Destroy;
begin
    if NotifyHandle <> THandle (-1) then
       FindCloseChangeNotification (NotifyHandle);
    Inherited Destroy;
    KillAddress^ := 0;
end;

procedure TFileSysNotifyThread.Execute;
begin
    NotifyHandle := FindFirstChangeNotification (PChar (WatchPath), False, WatchMask);
    if NotifyHandle <> THandle (-1) then while not Terminated do begin
        ErrCode := WaitForSingleObject (NotifyHandle, 250);
        case ErrCode of
             Wait_Timeout:
                 ;
             Wait_Object_0:
                 begin
                     Synchronize (SignalFileNotification);
                     FindNextChangeNotification (NotifyHandle);
                 end;
             else ;
        end;
    end;
end;

procedure TFileSysNotifyThread.SignalFileNotification;
begin
    ShowMessage ('文件已改变!');
end;

end.

⌨️ 快捷键说明

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