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

📄 列表7.3.txt

📁 klinux书籍的配套光盘。可以学习学习。
💻 TXT
字号:
【列表7.3】程序 LockFile的代码。
unit LockFileMain;
interface
uses
   SysUtils, Types. Classes, Variants, QGraphics, QControls, QForms. QDialogs.
   QStdCtrls. QExtCtrls. QTypes, Libc. QButtons;
type
  TLockFileMainForm = class(TForm)
      ExitBtn: TButton;
      PIDLabel: TLabel;
     GroupBox1: TGroupBox;
     StatusPanel: TPanel;
     Label1: TLabel;
     LockBtn: TButton;
     ReleaseBtn: TButton;
     Monitor: TTimer;
     procedure UpdateControls;
     procedure ExitBtnClick(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure LockBtnClick(Sender: TObject);
     procedure ReleaseBtnClick(Sender: TObject);
     procedure MonitorTimer(Sender: TObject);

   private
           { Private declarations }
   public
           { Public declarations }
   end;
   type
       TLockStatus = (tsdUnlocked, tsdPending, tsdLocked);
   const
       LockFileName = '/tmp/LCK.LockFileDemo';
   var
      LockFileMainForm: TLockFileMainForm;
      LockStatus : TLockStatus;
      FD : Integer;
   implementation
   {SR *,xfm}
  function FileLocked : Integer;
  begin
    Result := open(LockFileName, O_RDWR or O_CREAT or O_EXCL. 438);
  end;
  procedure TLockFileMainForm. UpdateControls;
  begin
   case LockStatus of
     tsdUnlocked : begin
                           StatusPanel.Color := clRed;
                           LockBtn,Enabled := True;
                           ReleaseBtn. Enabled:= False;
                         end;
     tsdPending  : begin
                          StatusPanel.Color := clYellow;
                          LockBtn. Enabled := False;
                          ReleaseBtn. Enabled := False;
                         end;
     tsdLocked   : begin
                          StatusPanel,Color := clGreen;
                          LockBtn. Enabled := False;
                         ReleaseBtn. Enabled := True;
                        end;
 end; { case }
end;
  procedure TLockFileMainForm. ExitBtnClick(Sender: TObject);
  begin
    { We do this housekeeping just for this demo! }
   if FileExists(LockFileName) then unlink(LockFileName);
   Close;
  end;
  procedure TLockFileMainForm. FormCreate(Sender: TObject);
  begin
   PIDLabel.Caption := 'Process ID: ' + IntToStr(getpid);
   LockStatus := tsdUnlocked;
   UpdateControls;
 end;
 procedure TLockFileMainForm. LockBtnClick(Sender: TObject);
 begin
   FD := FileLocked;
   if FD <> -1
    then LockStatus := tsdLocked
    else begin
             LockStatus := tsdPending;
             Monitor. Enabled := True;
           end;
  UpdateControls;
 end;
 procedure TLockFileMainForm. ReleaseBtnClick(Sender: TObject);
begin
  close(FD);
  unlink(LockFileName);
  LockStatus := tsdUnlocked;
  UpdateControls;
end;
procedure TLockFileMainForm. MonitorTimer(Sender: TObject);
begin
  FD := FileLocked;
  if FD <> -1
   then begin
            LockStatus := tsdLocked;
            UpdateControls;
            Monitor. Enabled := False;
          end;
end;
end.

⌨️ 快捷键说明

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