summaryrefslogtreecommitdiffstats
path: root/docs/nspr/reference/pr_intervalnow.rst
blob: 360dd6455a2460233be69ab0e24e0bf18a8af68f (plain)
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
PR_IntervalNow
==============

Returns the value of NSPR's free-running interval timer.


Syntax
------

.. code::

    #include <prinrval.h>

    PRIntervalTime PR_IntervalNow(void);


Returns
~~~~~~~

A :ref:`PRIntervalTime` object.


Description
-----------

You can use the value returned by ``PR_IntervalNow()`` to establish
epochs and to determine intervals (that is, compute the difference
between two times). ``PR_IntervalNow()`` is both very efficient and
nonblocking, so it is appropriate to use (for example) while holding a
mutex.

The most common use for ``PR_IntervalNow()`` is to establish an epoch
and test for the expiration of intervals. In this case, you typically
call ``PR_IntervalNow()`` in a sequence that looks like this:

.. code::

    PRUint32 interval = ... ; // milliseconds
    // ...
    PRStatus rv;
    PRIntervalTime epoch = PR_IntervalNow();
    PR_Lock(data->mutex);
    while (!EvaluateData(data))  /* wait until condition is met */
    {
        PRUint32 delta = PR_IntervalToMilliseconds(PR_IntervalNow() - epoch);
        if (delta > interval) break;  /* timeout */
        rv = PR_Wait(data->condition, PR_MillisecondsToInterval(interval - delta));
        if (PR_FAILURE == rv) break;  /* likely an interrupt */
    }
    PR_Unlock(data->mutex);