root/src/atimer.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


     1 /* Asynchronous timers.
     2    Copyright (C) 2000-2023 Free Software Foundation, Inc.
     3 
     4 This file is part of GNU Emacs.
     5 
     6 GNU Emacs is free software: you can redistribute it and/or modify
     7 it under the terms of the GNU General Public License as published by
     8 the Free Software Foundation, either version 3 of the License, or (at
     9 your option) any later version.
    10 
    11 GNU Emacs is distributed in the hope that it will be useful,
    12 but WITHOUT ANY WARRANTY; without even the implied warranty of
    13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    14 GNU General Public License for more details.
    15 
    16 You should have received a copy of the GNU General Public License
    17 along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.  */
    18 
    19 #ifndef EMACS_ATIMER_H
    20 #define EMACS_ATIMER_H
    21 
    22 #include <time.h>
    23 
    24 /* Forward declaration.  */
    25 
    26 struct atimer;
    27 
    28 /* Types of timers.  */
    29 
    30 enum atimer_type
    31 {
    32   /* Timer is ripe at some absolute time.  */
    33   ATIMER_ABSOLUTE,
    34 
    35   /* Timer is ripe at now plus an offset.  */
    36   ATIMER_RELATIVE,
    37 
    38   /* Timer runs continuously.  */
    39   ATIMER_CONTINUOUS
    40 };
    41 
    42 /* Type of timer callback functions.  */
    43 
    44 typedef void (* atimer_callback) (struct atimer *timer);
    45 
    46 /* Structure describing an asynchronous timer.  */
    47 
    48 struct atimer
    49 {
    50   /* The type of this timer.  */
    51   enum atimer_type type;
    52 
    53   /* Time when this timer is ripe.  */
    54   struct timespec expiration;
    55 
    56   /* Interval of this timer.  */
    57   struct timespec interval;
    58 
    59   /* Function to call when timer is ripe.  Interrupt input is
    60      guaranteed to not be blocked when this function is called.  */
    61   atimer_callback fn;
    62 
    63   /* Additional user-specified data to pass to FN.  */
    64   void *client_data;
    65 
    66   /* Next in list of active or free atimers.  */
    67   struct atimer *next;
    68 };
    69 
    70 /* Function prototypes.  */
    71 
    72 struct atimer *start_atimer (enum atimer_type, struct timespec,
    73                              atimer_callback, void *);
    74 void cancel_atimer (struct atimer *);
    75 void do_pending_atimers (void);
    76 void init_atimer (void);
    77 void turn_on_atimers (bool);
    78 void stop_other_atimers (struct atimer *);
    79 void run_all_atimers (void);
    80 #ifdef HAVE_TIMERFD
    81 void timerfd_callback (int, void *);
    82 #endif
    83 
    84 #endif /* EMACS_ATIMER_H */

/* [<][>][^][v][top][bottom][index][help] */