Next: tree234, Previous: thread.semaphore, Up: Top [Contents]
%--------------------------------------------------% % vim: ft=mercury ts=4 sw=4 et %--------------------------------------------------% % Originally written in 1999 by Tomas By <T.By@dcs.shef.ac.uk> % "Feel free to use this code or parts of it any way you want." % % Some portions are Copyright (C) 1999-2007,2009-2012 The University of Melbourne. % Copyright (C) 2014-2021 The Mercury team. % This file is distributed under the terms specified in COPYING.LIB. %--------------------------------------------------% % % File: time.m. % Main authors: Tomas By <T.By@dcs.shef.ac.uk>, fjh. % Stability: medium. % % Time functions. % %--------------------------------------------------% %--------------------------------------------------% :- module time. :- interface. :- import_module io. :- import_module maybe. %--------------------------------------------------% % The `clock_t' type represents times measured in clock ticks. % NOTE: the unit used for a value of this type depends on whether it was % returned by `clock' or `times'. See the comments on these % predicates below. % :- type clock_t == int. % The `tms' type holds information about the amount of processor time % that a process and its child processes have consumed. % :- type tms ---> tms( clock_t, % tms_utime: user time clock_t, % tms_stime: system time clock_t, % tms_cutime: user time of children clock_t % tms_cstime: system time of children ). % The `time_t' type is an abstract type that represents % calendar times. % :- type time_t. % The `tm' type is a concrete type that represents calendar times, % broken down into their constituent components. Comparison (via compare/3) % of `tm' values is equivalent to comparison of the times those `tm' % values represent IF AND ONLY IF their `tm_dst' components are identical. % % Whether leap seconds are supported depends on the target language. % Currently, only C supports leap seconds, while Java and C# do not. % For target languages that do not support leap seconds: % % - predicates in this module that produce a `tm' value as an output % will never set its `tm_sec' component to a value beyond 59; % % - predicates in this module that take a `tm_sec' value as an input % will throw a time_error/1 exception if the value of the `tm_sec' % component is beyond 59. % :- type tm ---> tm( tm_year :: int, % Year (number since 1900) tm_mon :: int, % Month (number since January, 0-11) tm_mday :: int, % MonthDay (1-31) tm_hour :: int, % Hours (after midnight, 0-23) tm_min :: int, % Minutes (0-59) tm_sec :: int, % Seconds (0-61) % (60 and 61 are for leap seconds) tm_yday :: int, % YearDay (number since Jan 1st, 0-365) tm_wday :: int, % WeekDay (number since Sunday, 0-6) tm_dst :: maybe(dst) % IsDST (is DST applicable, and if so, % is it in effect?) ). :- type dst ---> standard_time % no, DST is not in effect ; daylight_time. % yes, DST is in effect % Some of the procedures in this module throw this type % as an exception if they can't obtain a result. % :- type time_error ---> time_error(string). % Error message %--------------------------------------------------% % clock(Result, !IO): % % Returns the elapsed processor time (number of clock ticks). The base time % is arbitrary but doesn't change within a single process. If the time % cannot be obtained, this procedure will throw a time_error exception. % To obtain a time in seconds, divide Result by `clocks_per_sec'. % % On Java the elapsed time for the calling thread is returned. % :- pred clock(clock_t::out, io::di, io::uo) is det. % clocks_per_sec: % % Returns the number of "clocks" per second as defined by CLOCKS_PER_SEC. % A `clock_t' value returned by `clock' can be divided by this value % to obtain a time in seconds. Note that the value of this function does % not necessarily reflect the actual clock precision; it just indicates the % scaling factor for the results of `clock'. % :- func clocks_per_sec = int. %--------------------------------------------------% % time(Result, !IO): % % Returns the current (simple) calendar time. If the time cannot be % obtained, this procedure will throw a time_error exception. % :- pred time(time_t::out, io::di, io::uo) is det. %--------------------------------------------------% % times(ProcessorTime, ElapsedRealTime, !IO): % % (POSIX) % % Returns the processor time information in the `tms' value, and the % elapsed real time relative to an arbitrary base in the `clock_t' value. % To obtain a time in seconds, divide the result by `clk_tck'. % If the time cannot be obtained, this procedure will throw a time_error % exception. % % On non-POSIX systems that do not support this functionality, % this procedure may simply always throw an exception. % % On Java the times for the calling thread are returned. % On Win32 and Java the child part of 'tms' is always zero. % :- pred times(tms::out, clock_t::out, io::di, io::uo) is det. % clk_tck: % % Returns the number of "clock ticks" per second as defined by % sysconf(_SC_CLK_TCK). A `clock_t' value returned by `times' % can be divided by this value to obtain a time in seconds. % % On non-POSIX systems that do not support this functionality, % this procedure may simply always throw an exception. % :- func clk_tck = int. %--------------------------------------------------% % difftime(Time1, Time0) = Diff: % % Computes the number of seconds elapsed between `Time1' and `Time0'. % :- func difftime(time_t, time_t) = float. % localtime(Time, TM, !IO): % % Converts the (simple) calendar time `Time' to a broken-down % representation `TM', expressed relative to the current time zone. % :- pred localtime(time_t::in, tm::out, io::di, io::uo) is det. % gmtime(Time) = TM: % % Converts the (simple) calendar time `Time' to a broken-down % representation `TM', expressed as UTC (Universal Coordinated Time). % :- func gmtime(time_t) = tm. % mktime(TM, Time, !IO): % % Converts the broken-down time value `TM' to a (simple) calendar time % `Time'. That is, `TM' is relative to the current time zone. % The `tm_wday' and `tm_yday' fields of `TM' are ignored. % :- pred mktime(tm::in, time_t::out, io::di, io::uo) is det. %--------------------------------------------------% % asctime(TM) = String: % % Converts the broken-down time value `TM' to a string in a standard % format. % :- func asctime(tm) = string. %--------------------------------------------------% %--------------------------------------------------%
Next: tree234, Previous: thread.semaphore, Up: Top [Contents]