diff options
Diffstat (limited to 'test/threads.cxx')
| -rw-r--r-- | test/threads.cxx | 99 |
1 files changed, 82 insertions, 17 deletions
diff --git a/test/threads.cxx b/test/threads.cxx index 6aabed8f3..a48f798e8 100644 --- a/test/threads.cxx +++ b/test/threads.cxx @@ -1,26 +1,75 @@ -#include <fltk/Fl.h> -#include <fltk/Fl_Window.h> -#include <fltk/Fl_Browser.h> -#include <fltk/Fl_Threads.h> -#include <stdio.h> +// +// "$Id: threads.cxx,v 1.10.2.1 2001/12/08 16:23:51 easysw Exp $" +// +// Threading example program for the Fast Light Tool Kit (FLTK). +// +// Copyright 1998-2001 by Bill Spitzak and others. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems to "fltk-bugs@fltk.org". +// + +#include <config.h> + +#if HAVE_PTHREAD || defined(WIN32) +# include <FL/Fl.H> +# include <FL/Fl_Window.H> +# include <FL/Fl_Browser.H> +# include <FL/Fl_Value_Output.H> +# include "threads.h" +# include <stdio.h> +# include <math.h> Fl_Thread prime_thread; Fl_Browser *browser1, *browser2; +Fl_Value_Output *value1, *value2; +int start2 = 3; void* prime_func(void* p) { Fl_Browser* browser = (Fl_Browser*) p; + Fl_Value_Output *value; + int n; + int step; + + if (browser == browser2) { + n = start2; + start2 += 2; + step = 12; + value = value2; + } else { + n = 3; + step = 2; + value = value1; + } - // very loosy prime number calculator ! - for (int n=1000000; ; n++) { + // very simple prime number calculator ! + for (; ; n+= step) { int p; - for (p=2; p<n; p++) if ( n%p == 0 ) break; - if (p == n) { + int hn = (int)sqrt(n); + for (p=3; p<=hn; p+=2) if ( n%p == 0 ) break; + if (p >= hn) { char s[128]; sprintf(s, "%d", n); Fl::lock(); browser->add(s); + browser->bottomline(browser->size()); + if (n > value->value()) value->value(n); Fl::unlock(); Fl::awake((void*) (browser == browser1? p:0)); // Cause the browser to redraw ... } @@ -30,17 +79,21 @@ void* prime_func(void* p) int main() { - Fl_Window* w = new Fl_Window(200, 300, "Multithread test"); - browser1 = new Fl_Browser(0, 0, 200, 300); + Fl_Window* w = new Fl_Window(200, 200, "Single Thread"); + browser1 = new Fl_Browser(0, 0, 200, 175); + w->resizable(browser1); + value1 = new Fl_Value_Output(100, 175, 200, 25, "Max Prime:"); w->end(); w->show(); - w = new Fl_Window(200, 300, "Multithread test"); - browser2 = new Fl_Browser(0, 0, 200, 300); + w = new Fl_Window(200, 200, "Six Threads"); + browser2 = new Fl_Browser(0, 0, 200, 175); + w->resizable(browser2); + value2 = new Fl_Value_Output(100, 175, 200, 25, "Max Prime:"); w->end(); w->show(); - browser1->add("Prime numbers :"); - browser2->add("Prime numbers :"); + browser1->add("Prime numbers:"); + browser2->add("Prime numbers:"); Fl::lock(); // you must do this before creating any threads! @@ -57,9 +110,21 @@ int main() // Fl::run(); while (w->visible()) { Fl::wait(); - void* m = Fl::thread_message(); - if (m) printf("Recieved message: %d\n", int(m)); +// void* m = Fl::thread_message(); +// printf("Received message: %p\n", m); } return 0; } +#else +# include <FL/fl_ask.H> + +int main() { + fl_alert("Sorry, threading not supported on this platform!"); +} +#endif // HAVE_PTHREAD || WIN32 + + +// +// End of "$Id: threads.cxx,v 1.10.2.1 2001/12/08 16:23:51 easysw Exp $". +// |
