summaryrefslogtreecommitdiffstats
path: root/docs/nspr/reference/pr_intervalnow.rst
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /docs/nspr/reference/pr_intervalnow.rst
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--docs/nspr/reference/pr_intervalnow.rst50
1 files changed, 50 insertions, 0 deletions
diff --git a/docs/nspr/reference/pr_intervalnow.rst b/docs/nspr/reference/pr_intervalnow.rst
new file mode 100644
index 0000000000..360dd6455a
--- /dev/null
+++ b/docs/nspr/reference/pr_intervalnow.rst
@@ -0,0 +1,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);