source: libcfa/src/concurrency/alarm.hfa @ 1756e08

ADTast-experimental
Last change on this file since 1756e08 was 1756e08, checked in by Thierry Delisle <tdelisle@…>, 19 months ago

Added some defensive programming to work around parsing bug

  • Property mode set to 100644
File size: 2.3 KB
RevLine 
[6cff9f3]1//
2// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
[73abe95]7// alarm.hfa --
[6cff9f3]8//
9// Author           : Thierry Delisle
10// Created On       : Fri Jun 2 11:31:25 2017
[91c389a]11// Last Modified By : Peter A. Buhr
[2a84d06d]12// Last Modified On : Mon Mar 26 16:25:41 2018
13// Update Count     : 11
[6cff9f3]14//
15
[6b0b624]16#pragma once
[6cff9f3]17
[c81ebf9]18#include <stdbool.h>
[8cb529e]19#include <stdint.h>
[c81ebf9]20
[91c389a]21#include <assert.h>
[6cff9f3]22
[58b6d1b]23#include "time.hfa"
[b69ea6b]24
[1eb239e4]25#include "containers/list.hfa"
[d3ab183]26
[e84ab3d]27struct thread$;
[6cff9f3]28struct processor;
29
[969b3fe]30//=============================================================================================
31// Clock logic
32//=============================================================================================
[c81ebf9]33
[2a84d06d]34Time __kernel_get_time();
35void __kernel_set_timer( Duration alarm );
[c81ebf9]36
37//=============================================================================================
38// Alarm logic
39//=============================================================================================
40
[eeb5023]41enum alarm_type{ Kernel = 0, User = 1, Callback = 2 };
42
43struct alarm_node_t;
44
45typedef void (*Alarm_Callback)(alarm_node_t & );
46
[6cff9f3]47struct alarm_node_t {
[c457dc41]48        Duration initial;       // time when alarm goes off
49        Duration period;        // if > 0 => period of alarm
[d3ab183]50
[69914cbc]51        inline dlink(alarm_node_t);
[6cff9f3]52
53        union {
[e84ab3d]54                thread$ * thrd;                 // thrd who created event
[c457dc41]55                processor * proc;                       // proc who created event
56                Alarm_Callback callback;        // callback to handle event
[6cff9f3]57        };
[c81ebf9]58
[1756e08]59        Time deadline;          // actual time at which the alarm goes off
[c457dc41]60        enum alarm_type type;   // true if this is not a user defined alarm
61        bool set                :1;     // whether or not the alarm has be registered
[6cff9f3]62};
[69914cbc]63P9_EMBEDDED( alarm_node_t, dlink(alarm_node_t) )
[6cff9f3]64
[e84ab3d]65void ?{}( alarm_node_t & this, thread$ * thrd, Duration alarm, Duration period );
[c457dc41]66void ?{}( alarm_node_t & this, processor * proc, Duration alarm, Duration period );
67void ?{}( alarm_node_t & this, Alarm_Callback callback, Duration alarm, Duration period );
[242a902]68void ^?{}( alarm_node_t & this );
[6cff9f3]69
[69914cbc]70typedef dlist(alarm_node_t) alarm_list_t;
[6cff9f3]71
72void insert( alarm_list_t * this, alarm_node_t * n );
73alarm_node_t * pop( alarm_list_t * this );
74
[c81ebf9]75void register_self  ( alarm_node_t * this );
76void unregister_self( alarm_node_t * this );
77
[6cff9f3]78// Local Variables: //
[6b0b624]79// mode: c //
[6cff9f3]80// tab-width: 6 //
[242a902]81// End: //
Note: See TracBrowser for help on using the repository browser.