summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl.cxx3
-rw-r--r--src/Fl_lock.cxx10
2 files changed, 11 insertions, 2 deletions
diff --git a/src/Fl.cxx b/src/Fl.cxx
index fa0620fa6..79956bfd7 100644
--- a/src/Fl.cxx
+++ b/src/Fl.cxx
@@ -258,6 +258,9 @@ int Fl::event_inside(const Fl_Widget *o) /*const*/ {
If you need more accurate, repeated timeouts, use Fl::repeat_timeout() to
reschedule the subsequent timeouts. Please see Fl::repeat_timeout() for
an example.
+
+ Since version 1.4, a timeout can be started from a child thread under the
+ condition that the call to Fl::add_timeout is wrapped in Fl::lock() and Fl::unlock().
\param[in] time delta time in seconds until the timer expires
\param[in] cb callback function
diff --git a/src/Fl_lock.cxx b/src/Fl_lock.cxx
index fdf045be9..d7bdf9c34 100644
--- a/src/Fl_lock.cxx
+++ b/src/Fl_lock.cxx
@@ -179,8 +179,14 @@ int Fl::awake(Fl_Awake_Handler func, void *data) {
argument will trigger event loop handling in the main thread. Since
it is not possible to call Fl::flush() from a subsidiary thread,
Fl::awake() is the best (and only, really) substitute.
-
- See also: \ref advanced_multithreading
+
+ It's \e not necessary to wrap calls to any form of Fl::awake() by Fl::lock() and Fl::unlock().
+ Nevertheless, the early, single call to Fl::lock() used to initialize threading support is necessary.
+
+ Function Fl::awake() in all its forms is typically called by worker threads, but it can be used safely
+ by the main thread too, as a means to break the event loop.
+
+ \see \ref advanced_multithreading
*/
void Fl::awake(void *v) {