📄 列表6.4.txt
字号:
【列表6.4】摘录自HndRecvrMain.pas的程序代码。
var
HndRecvrForm: THndRecvrForm;
SigActionRec: TSigAction;
procedure Handler(Sig : Integer); cdecl;
begin
case Sig of
SIGUSR1 : HndRecvrForm. ColorPanel.Color := clGreen;
SIGUSR2 : HndRecvrForm. ColorPanel.Color := clRed;
SIGINT : ShowMessage('Received a Ctrl+C Interrupt!');
end; { case }
end;
procedure InstallHandlers;
begin
with SigActionRec do
begin
__sigaction_handler := Handler;
sigemptyset(sa_mask);
sa_flags := 0;
sigaction(SIGUSR1, @SigActionRec, nil);
sigaction(SIGUSR2, @SigActionRec, nil);
sigaction(SIGINT, @SigActionRec, nil);
end; { with }
end;
procedure DefaultHandlers;
begin
with SigActionRec do
begin
__sigaction_handler := TSigActionHandler(SIG_DFL);
sigemptyset(sa_mask);
sa_flags := 0;
sigaction(SIGUSR1, @SigActionRec, nil);
sigaction(SIGUSR2, @SigActionRec, nil);
sigaction(SIGINT, @SigActionRec, nil);
end; { with }
end;
procedure IgnoreHandlers;
begin
with SigActionRec do
begin
__sigaction_handler := TSigActionHandler(SIG_IGN);
sigemptyset(sa_mask);
sa_flags := 0;
sigaction(SIGUSR1, @SigActionRec, nil);
sigaction(SIGUSR2, @SigActionRec, nil);
sigaction(SIGINT, @SigActionRec, nil);
end; { with }
end;
procedure THndRecvrForm. BlockIntCBClick(Sender: TObject);
var
ProcMask : sigset_t;
begin
sigemptyset(ProcMask);
sigaddset(ProcMask, SIGINT);
if BtockIntCB.Checked
then sigprocmask(SIG_BLOCK, @ProcMask. nil)
else sigprocmask(SIG_UNBLOCK, @ProcMask, nil);
end;
procedure THndRecvrForm. MonitorTimerTimer(Sender: TObject);
var
PendingMask : sigset_t;
begin
sigpending(PendingMask);
if sigismember(PendingMask, SIGINT) <> 0
then StatusLabel.Caption := '(Interrupt pending)'
else StatusLabel.Caption := '';
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -