From 497afccb07164373e0de6639e754d7d691f1926f Mon Sep 17 00:00:00 2001 From: Fabien Costantini Date: Tue, 14 Oct 2008 22:12:25 +0000 Subject: Doxygen pdf man: First version added in documentation/fltk.pdf, old doc removed, images, dox files moved to a new src directory. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@6431 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- documentation/advanced.html | 95 --------------------------------------------- 1 file changed, 95 deletions(-) delete mode 100644 documentation/advanced.html (limited to 'documentation/advanced.html') diff --git a/documentation/advanced.html b/documentation/advanced.html deleted file mode 100644 index 774a75ccd..000000000 --- a/documentation/advanced.html +++ /dev/null @@ -1,95 +0,0 @@ - - - 10 - Advanced FLTK - - - -

10 - Advanced FLTK

- -

This chapter explains advanced programming and design topics -that will help you to get the most out of FLTK.

- -

Multithreading

- -

FLTK supports multithreaded application using a locking mechanism based on "pthreads". We do not provide a threading interface as part of the library. However a simple example how threads can be implemented for all supported platforms can be found in test/threads.h and test/threads.cxx. - -

To use the locking mechanism, FLTK must be compiled with --enable-threads set during the configure process. IDE-based versions of FLTK are automatically compiled with locking enabled if possible. - -

In main(), call Fl::lock() before Fl::run() or Fl::wait() to start the runtime multithreading support for your program. All callbacks and derived functions like handle() and draw() will now be properly locked:

- -
-    int main() {
-      Fl::lock();
-      /* run thread */
-      while (Fl::wait() > 0) {
-        if (Fl::thread_message()) {
-          /* process your data */
-        }
-      }
-    }
-
- -

You can now start as many threads as you like. From within -a thread (other than the main thread) FLTK calls must be wrapped -with calls to Fl::lock() -and Fl::unlock(): - -

-    Fl::lock();      // avoid conflicting calls
-    ...              // your code here
-    Fl::unlock();    // allow other threads to access FLTK again
-
- -

You can send messages from child threads to the main thread -using Fl::awake(msg):

- -
-    void *msg;       // "msg" is a pointer to your message
-    Fl::awake(msg);  // send "msg" to main thread
-
- -

You can also tell the main thread to call a function for you -as soon as possible by using -Fl::awake(callback, userdata):

- -
-    void do_something(void *userdata) {
-      // running with the main thread
-    }
-
-    // running in another thread
-    void *data;       // "data" is a pointer to your user data
-    Fl::awake(do_something, data);  // call something in main thread
-
- - -

FLTK supports multiple platforms, some of them which do not -allow any other but the main thread to handle system events and -open or close windows. The safe thing to do is to adhere to the -following rules for threads on all operating systems: - -

- -

See also: -void awake(void *message), -void lock(), -void *thread_message(), -void unlock(). - - - -- cgit v1.2.3