summaryrefslogtreecommitdiff
path: root/test/threads.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'test/threads.cxx')
-rw-r--r--test/threads.cxx65
1 files changed, 65 insertions, 0 deletions
diff --git a/test/threads.cxx b/test/threads.cxx
new file mode 100644
index 000000000..6aabed8f3
--- /dev/null
+++ b/test/threads.cxx
@@ -0,0 +1,65 @@
+#include <fltk/Fl.h>
+#include <fltk/Fl_Window.h>
+#include <fltk/Fl_Browser.h>
+#include <fltk/Fl_Threads.h>
+#include <stdio.h>
+
+Fl_Thread prime_thread;
+
+Fl_Browser *browser1, *browser2;
+
+void* prime_func(void* p)
+{
+ Fl_Browser* browser = (Fl_Browser*) p;
+
+ // very loosy prime number calculator !
+ for (int n=1000000; ; n++) {
+ int p;
+ for (p=2; p<n; p++) if ( n%p == 0 ) break;
+ if (p == n) {
+ char s[128];
+ sprintf(s, "%d", n);
+ Fl::lock();
+ browser->add(s);
+ Fl::unlock();
+ Fl::awake((void*) (browser == browser1? p:0)); // Cause the browser to redraw ...
+ }
+ }
+ return 0;
+}
+
+int main()
+{
+ Fl_Window* w = new Fl_Window(200, 300, "Multithread test");
+ browser1 = new Fl_Browser(0, 0, 200, 300);
+ w->end();
+ w->show();
+ w = new Fl_Window(200, 300, "Multithread test");
+ browser2 = new Fl_Browser(0, 0, 200, 300);
+ w->end();
+ w->show();
+
+ browser1->add("Prime numbers :");
+ browser2->add("Prime numbers :");
+
+ Fl::lock(); // you must do this before creating any threads!
+
+ // One thread displaying in one browser
+ fl_create_thread(prime_thread, prime_func, browser1);
+ // Several threads displaying in another browser
+ fl_create_thread(prime_thread, prime_func, browser2);
+ fl_create_thread(prime_thread, prime_func, browser2);
+ fl_create_thread(prime_thread, prime_func, browser2);
+ fl_create_thread(prime_thread, prime_func, browser2);
+ fl_create_thread(prime_thread, prime_func, browser2);
+ fl_create_thread(prime_thread, prime_func, browser2);
+
+ // Fl::run();
+ while (w->visible()) {
+ Fl::wait();
+ void* m = Fl::thread_message();
+ if (m) printf("Recieved message: %d\n", int(m));
+ }
+
+ return 0;
+}