Hi,
I tried to implement linux timer with timer_create and signals, but an exception always fired (External:SIGUSR1).
It was a lcl program, but I narrowed it to a console one. Here is the lines without extra codes of releasing (the error appears before),
What can be wrong with the code below?
Thanks in advance,
Max
==================================
program ConsTest;
uses ... libc, baseunix;
procedure PosixTimerHandler(signal: longint; info: psiginfo; context:
psigcontext);cdecl;
begin
Now; // <- Never stops here.
end;
procedure TMyApplication.DoRun;
var
...
fnewact: SigActionRec;
fits: itimerspec;
sev: sigevent;
timerid: timer_t;
begin
...
{ add your program here }
FillChar(fnewact, sizeof(SigActionRec),0);
fnewact.sa_handler := @PosixTimerHandler;
fnewact.sa_flags:=SA_SIGINFO;
if fpsigaction(SIGUSR1,@fnewact, Nil) 0 then
raise Exception.Create('sigaction failed');
sev.sigev_notify := SIGEV_SIGNAL;
sev.sigev_signo := SIGUSR1;
timer_create(CLOCK_REALTIME, @sev, @timerid);
fits.it_value.tv_sec := 1;
fits.it_value.tv_nsec := 0;
fits.it_interval.tv_sec := 1;
fits.it_interval.tv_nsec := 0;
timer_settime(timerid, 0, @fits, Nil);
ReadLn(); // <- raise External:SIGUSR1. With debug fpc rtl, the line stops
at "call psysinfo" inside FpSysCall