]> git.saurik.com Git - apple/libdispatch.git/blame - man/dispatch_time.3
libdispatch-501.40.12.tar.gz
[apple/libdispatch.git] / man / dispatch_time.3
CommitLineData
517da941 1.\" Copyright (c) 2008-2013 Apple Inc. All rights reserved.
0ab74447
A
2.Dd May 1, 2009
3.Dt dispatch_time 3
4.Os Darwin
5.Sh NAME
6.Nm dispatch_time ,
7.Nm dispatch_walltime
8.Nd Calculate temporal milestones
9.Sh SYNOPSIS
10.Fd #include <dispatch/dispatch.h>
c093abd6 11.Vt static const dispatch_time_t DISPATCH_TIME_NOW = 0ull ;
0ab74447
A
12.Vt static const dispatch_time_t DISPATCH_TIME_FOREVER = ~0ull ;
13.Ft dispatch_time_t
14.Fo dispatch_time
15.Fa "dispatch_time_t base" "int64_t offset"
16.Fc
17.Ft dispatch_time_t
18.Fo dispatch_walltime
19.Fa "struct timespec *base" "int64_t offset"
20.Fc
21.Sh DESCRIPTION
22The
23.Fn dispatch_time
24and
25.Fn dispatch_walltime
26functions provide a simple mechanism for expressing temporal milestones for use
27with dispatch functions that need timeouts or operate on a schedule.
28.Pp
29The
30.Fa dispatch_time_t
31type is a semi-opaque integer, with only the special values
32.Vt DISPATCH_TIME_NOW
33and
34.Vt DISPATCH_TIME_FOREVER
35being externally defined. All other values are represented using an internal
36format that is not safe for integer arithmetic or comparison.
37The internal format is subject to change.
38.Pp
39The
40.Fn dispatch_time
41function returns a milestone relative to an existing milestone after adding
42.Fa offset
43nanoseconds.
44If the
45.Fa base
46parameter maps internally to a wall clock, then the returned value is
47relative to the wall clock.
48Otherwise, if
49.Fa base
50is
51.Vt DISPATCH_TIME_NOW ,
52then the the current time of the default host clock is used.
53.Pp
54The
55.Fn dispatch_walltime
56function is useful for creating a milestone relative to a fixed point in time
57using the wall clock, as specified by the optional
58.Fa base
59parameter. If
60.Fa base
61is NULL, then the current time of the wall clock is used.
62.Sh EDGE CONDITIONS
63The
64.Fn dispatch_time
65and
66.Fn dispatch_walltime
67functions detect overflow and underflow conditions when applying the
68.Fa offset
69parameter.
70.Pp
71Overflow causes
72.Vt DISPATCH_TIME_FOREVER
73to be returned. When
74.Fa base
75is
76.Vt DISPATCH_TIME_FOREVER ,
77then the
78.Fa offset
79parameter is ignored.
80.Pp
81Underflow causes the smallest representable value to be
82returned for a given clock.
517da941
A
83.Sh CAVEATS
84Under the C language, untyped numbers default to the
85.Vt int
86type. This can lead to truncation bugs when arithmetic operations with other
87numbers are expected to generate a
88.Vt int64_t
89sized result, such as the
90.Fa offset
91argument to
92.Fn dispatch_time
93and
94.Fn dispatch_walltime .
95When in doubt, use
96.Vt ull
97as a suffix. For example:
98.Bd -literal -offset indent
993ull * NSEC_PER_SEC
100.Ed
0ab74447
A
101.Sh EXAMPLES
102Create a milestone two seconds in the future:
103.Bd -literal -offset indent
104milestone = dispatch_time(DISPATCH_TIME_NOW, 2LL * NSEC_PER_SEC);
105.Ed
106.Pp
107Create a milestone for use as an infinite timeout:
108.Bd -literal -offset indent
109milestone = DISPATCH_TIME_FOREVER;
110.Ed
111.Pp
112Create a milestone on Tuesday, January 19, 2038:
113.Bd -literal -offset indent
114struct timespec ts;
115ts.tv_sec = 0x7FFFFFFF;
116ts.tv_nsec = 0;
117milestone = dispatch_walltime(&ts, 0);
118.Ed
119.Sh RETURN VALUE
120These functions return an abstract value for use with
121.Fn dispatch_after ,
122.Fn dispatch_group_wait ,
517da941 123.Fn dispatch_semaphore_wait ,
0ab74447 124or
517da941 125.Fn dispatch_source_set_timer .
0ab74447 126.Sh SEE ALSO
e85f4437 127.Xr dispatch 3 ,
0ab74447
A
128.Xr dispatch_after 3 ,
129.Xr dispatch_group_create 3 ,
130.Xr dispatch_semaphore_create 3