Measure the interval since the start in order to provide a monotonic time for periodical tasks not using timers like driftfile updates, key refresh, etc. Return the interval in the double format, but keep an integer remainder limiting the precision to 0.01 second to avoid issues with very small increments in a long-running process.
95 lines
3.5 KiB
C
95 lines
3.5 KiB
C
/*
|
|
chronyd/chronyc - Programs for keeping computer clocks accurate.
|
|
|
|
**********************************************************************
|
|
* Copyright (C) Richard P. Curnow 1997-2002
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of version 2 of the GNU General Public License as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
**********************************************************************
|
|
|
|
=======================================================================
|
|
|
|
Exported header file for sched.c
|
|
*/
|
|
|
|
#ifndef GOT_SCHED_H
|
|
#define GOT_SCHED_H
|
|
|
|
#include "sysincl.h"
|
|
|
|
/* Type for timeout IDs, valid IDs are always greater than zero */
|
|
typedef unsigned int SCH_TimeoutID;
|
|
|
|
typedef enum {
|
|
SCH_ReservedTimeoutValue = 0,
|
|
SCH_NtpClientClass,
|
|
SCH_NtpPeerClass,
|
|
SCH_NtpBroadcastClass,
|
|
SCH_NumberOfClasses /* needs to be last */
|
|
} SCH_TimeoutClass;
|
|
|
|
typedef void* SCH_ArbitraryArgument;
|
|
typedef void (*SCH_FileHandler)(int fd, int event, SCH_ArbitraryArgument);
|
|
typedef void (*SCH_TimeoutHandler)(SCH_ArbitraryArgument);
|
|
|
|
/* Exported functions */
|
|
|
|
/* Initialisation function for the module */
|
|
extern void SCH_Initialise(void);
|
|
|
|
/* Finalisation function for the module */
|
|
extern void SCH_Finalise(void);
|
|
|
|
/* File events */
|
|
#define SCH_FILE_INPUT 1
|
|
#define SCH_FILE_OUTPUT 2
|
|
#define SCH_FILE_EXCEPTION 4
|
|
|
|
/* Register a handler for when select goes true on a file descriptor */
|
|
extern void SCH_AddFileHandler(int fd, int events, SCH_FileHandler handler, SCH_ArbitraryArgument arg);
|
|
extern void SCH_RemoveFileHandler(int fd);
|
|
extern void SCH_SetFileHandlerEvent(int fd, int event, int enable);
|
|
|
|
/* Get the time stamp taken after a file descriptor became ready or a timeout expired */
|
|
extern void SCH_GetLastEventTime(struct timespec *cooked, double *err, struct timespec *raw);
|
|
|
|
/* Get a low-precision monotonic timestamp (starting at 0.0) */
|
|
extern double SCH_GetLastEventMonoTime(void);
|
|
|
|
/* This queues a timeout to elapse at a given (raw) local time */
|
|
extern SCH_TimeoutID SCH_AddTimeout(struct timespec *ts, SCH_TimeoutHandler handler, SCH_ArbitraryArgument arg);
|
|
|
|
/* This queues a timeout to elapse at a given delta time relative to the current (raw) time */
|
|
extern SCH_TimeoutID SCH_AddTimeoutByDelay(double delay, SCH_TimeoutHandler, SCH_ArbitraryArgument);
|
|
|
|
/* This queues a timeout in a particular class, ensuring that the
|
|
expiry time is at least a given separation away from any other
|
|
timeout in the same class, given randomness is added to the delay
|
|
and separation */
|
|
extern SCH_TimeoutID SCH_AddTimeoutInClass(double min_delay, double separation, double randomness,
|
|
SCH_TimeoutClass class,
|
|
SCH_TimeoutHandler handler, SCH_ArbitraryArgument);
|
|
|
|
/* The next one probably ought to return a status code */
|
|
extern void SCH_RemoveTimeout(SCH_TimeoutID);
|
|
|
|
/* Remove all timeouts and close all file descriptors */
|
|
extern void SCH_Reset(void);
|
|
|
|
extern void SCH_MainLoop(void);
|
|
|
|
extern void SCH_QuitProgram(void);
|
|
|
|
#endif /* GOT_SCHED_H */
|