diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2007-03-06 17:15:03 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2007-03-06 17:15:03 +0000 |
| commit | 11a15d83a2be539c0e660c20ab92d8d4d2736f99 (patch) | |
| tree | 72283c2251a13b51143774d34d48efc79c67f5fc /src/Fl_win32.cxx | |
| parent | 6df72e8979a4276f799b4237c0b1f66b695b9b1b (diff) | |
This is a suggested change. It is complete except for documentation.
I did not like the awake_cb system at all. These changes implement Fl::awake(Fl_Awake_Handler, void*) which is called from a thread and tells the main loop to call the specified handler (rather a callback I guess) as soon as possible from within the main thread. It is implemented as Fifo (currently 1024 entry ring buffer), so handlers are called in the order that they are generated in.
"test/threads" was modified to change the label color as soon as a thread reaches 10000 - pretty boring, but it show the wonderful simplicity of this approach: you can write libraries that don't need to add to the main loop or register a handler at all... .
I will do some more stress testing tonight.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5729 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_win32.cxx')
| -rw-r--r-- | src/Fl_win32.cxx | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/Fl_win32.cxx b/src/Fl_win32.cxx index 6fc64c778..4df22baae 100644 --- a/src/Fl_win32.cxx +++ b/src/Fl_win32.cxx @@ -300,6 +300,11 @@ int fl_wait(double time_to_wait) { // Used for awaking wait() from another thread thread_message_ = (void*)fl_msg.wParam; if (Fl::awake_cb) (*Fl::awake_cb)(thread_message_); + Fl_Awake_Handler func; + void *data; + while (Fl::get_awake_handler_(func, data)==0) { + func(data); + } } TranslateMessage(&fl_msg); |
