1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
------------------------------------------------------------------------------
-- --
-- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
-- --
-- S Y S T E M . T I M E _ O P E R A T I O N S --
-- --
-- B o d y --
-- (Version for new GNARL) --
-- --
-- $Revision: 1.8 $ --
-- --
-- Copyright (C) 1991-1997, Florida State University --
-- --
-- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
-- ware Foundation; either version 2, or (at your option) any later ver- --
-- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
-- OUT 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 distributed with GNARL; see file COPYING. If not, write --
-- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
-- MA 02111-1307, USA. --
-- --
-- As a special exception, if other files instantiate generics from this --
-- unit, or you link this unit with other files to produce an executable, --
-- this unit does not by itself cause the resulting executable to be --
-- covered by the GNU General Public License. This exception does not --
-- however invalidate any other reasons why the executable file might be --
-- covered by the GNU Public License. --
-- --
-- GNARL was developed by the GNARL team at Florida State University. It is --
-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
-- State University (http://www.gnat.com). --
-- --
------------------------------------------------------------------------------
-- This is a FSU THREADS version of this package.
-- DO NOT EDIT this file.
-- It was automatically generated from another file by the m4 macro processor.
-- The name of the file you should edit is the same as this one, but with
-- ".ads" replaced by ".sm4", or
-- ".adb" replaced by ".bm4", or
-- ".c" replaced by ".cm4", or
-- ".dat" replaced by ".tm4"
-- Local options selected:
-- __TARGET = sparc-sun-SunOS
-- __ARCH = SPARC
-- __OS = SUNOS41X
-- __HAS_SIGCONTEXT = 1
-- __HAS_UCONTEXT = 0
-- __THREADS = POSIX_THREADS
-- __THREAD_VARIANT = FSU_THREADS
-- __HAS_TIMESPEC = 1
-- __HAS_NANOSLEEP = 1
-- __HAS_CLOCK_GETTIME = 1
-- __HAS_GETTIMEOFDAY = 1
-- __POSIX_THREAD_PRIO_PROTECT = 1
-- __POSIX_THREAD_PRIO_INHERIT = 0
-- __POSIX_THREAD_ATTR_STACKADDR = 0
-- __POSIX_THREAD_ATTR_STACKSIZE = 0
-- __POSIX_THREAD_PRIORITY_SCHEDULING = 1
with System.Error_Reporting;
-- used for Shutdown
with System.OS_Interface;
with Interfaces.C;
with System.Task_Primitives.Operations;
-- used for Clock
-- Task_ID
-- Self
package body System.Time_Operations is
use System.Error_Reporting;
use System.OS_Interface;
use Interfaces.C;
use System.Task_Primitives.Operations;
-- For abortion safety, we need to
-- implement these using cond_timedwait. Use the service provided by
-- System.Task_Primitives.Operations.
-- -----------------
-- -- Delay_Until --
-- -----------------
procedure Delay_Until (Abs_Time : Duration) is
Self_ID : Task_ID;
Timed_Out : Boolean;
Result : Interfaces.C.int;
begin
if Abs_Time <= Clock then
Result := sched_yield;
return;
end if;
Self_ID := Self;
Write_Lock (Self_ID);
Sleep_Until (Self_ID, Abs_Time, Timed_Out);
Unlock (Self_ID);
end Delay_Until;
---------------
-- Delay_For --
---------------
procedure Delay_For (Rel_Time : Duration) is
begin
Delay_Until (Clock + Rel_Time);
end Delay_For;
end System.Time_Operations;
|