00001 // more/sys/time.h 00002 // Copyright (C) 1998--2001 Petter Urkedal (petter.urkedal@matfys.lth.se) 00003 // 00004 // This file is free software; you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation; either version 2 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // This file is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with this program; if not, write to the Free Software 00016 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00017 // 00018 // As a special exception, you may use this file as part of a free 00019 // software library without restriction. Specifically, if other files 00020 // instantiate templates or use macros or inline functions from this 00021 // file, or you compile this file and link it with other files to 00022 // produce an executable, this file does not by itself cause the 00023 // resulting executable to be covered by the GNU General Public 00024 // License. This exception does not however invalidate any other 00025 // reasons why the executable file might be covered by the GNU General 00026 // Public License. 00027 // 00028 // $Id: time.h,v 1.1 2002/05/30 18:01:40 petter_urkedal Exp $ 00029 00030 00031 00032 #ifndef MORE_SYS_TIME_H 00033 #define MORE_SYS_TIME_H 00034 00035 #include <ctime> 00036 #include <stdexcept> 00037 #include <iosfwd> 00038 00039 00040 namespace more { 00041 namespace sys { 00042 00043 /** A floating point type used to represent time. Some philosopies 00044 regards time as a discrete sequence of moments. A more common 00045 view is that time is continuous. 00046 00047 Precision. Assume this is a 64 bits double with a 53 bits 00048 mantissa. If we use 33 bits for the year, 2↑33 s ≃ 272 y, 00049 i.e. in year 2242 there is still 20 bits left for subsecond 00050 precision down to 2^(-20) s = 0.95 μs. For relative time within 00051 12 days ≃ 2↑20 s the precision is about 0.1 ns, but at the 00052 moment the OS calls limit the precision to 1 μs. */ 00053 typedef double time_t; 00054 00055 /** The current real-world time. More precisely, the time 00056 difference in seconds between present and Epoch (1970-01-01 00057 00:00:00 UTC). If the \c gettimeofday is available on your 00058 system, the returned time will have 1 μs precision, otherwise it 00059 will have 1 s precision. */ 00060 time_t current_time(); 00061 00062 /** Return the current real-world time relative to \a t_ref. By 00063 supplying a reference point close to the current time, time 00064 differences may be calculated with better precision then when 00065 using Epoch times. (At the moment the precision is most likely 00066 limited by the OS call, though.) */ 00067 time_t current_time(time_t const& t_ref); 00068 00069 /** Return the processor time spent in this process. If getrusage 00070 is not available \c clock(), which may overflow, is used. */ 00071 time_t process_time(); 00072 // inline time_t process_time() { return std::clock()/(time_t)CLOCKS_PER_SEC; } 00073 00074 // XXX Maybe this should be in the IO module 00075 void print_time_nicely(std::ostream& out, double t); 00076 00077 /** Sleep for the given time. If nanosleep is available on the 00078 system, the precision may be down to ns, else if setitimer is 00079 available, the precision may be down to μs, otherwise the 00080 precision is down to s, but in any case the precision is limited 00081 by the scheduler. */ 00082 void sleep(double); 00083 00084 } // sys 00085 using sys::time_t; 00086 using sys::current_time; 00087 using sys::process_time; 00088 using sys::print_time_nicely; 00089 } // more 00090 00091 #endif 00092 00093 // Local Variables: 00094 // coding: utf-8 00095 // End: