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
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal