summaryrefslogtreecommitdiff
path: root/test/threads.cxx
diff options
context:
space:
mode:
authorNo Author <No Author>2001-08-01 21:24:49 +0000
committerNo Author <No Author>2001-08-01 21:24:49 +0000
commit3cb5ebe0e811f3db008085d985b7761725589a74 (patch)
tree0a7184a5f02fffe927af911758f3a9a4a2f4a37e /test/threads.cxx
parent4477e166400f197bed50b09e01e695221cde96b6 (diff)
This commit was manufactured by cvs2svn to create branch 'branch-1.1'.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@1513 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
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;
+}