> I think what you are missing is that you have not attached a callback
> to your button, so the button does not know what to do when you click
> on it.
>
> Here's a simple example that shows what you might do:
> -------------------
> /* Thread Test Code */
>
> #include <stdlib.h>
> #include <stdio.h>
> #include <unistd.h>
>
> #include <FL/Fl.H>
> #include <FL/Fl_Double_Window.H>
> #include <FL/Fl_Button.H>
>
> #include "threads.h"
>
> #ifdef WIN32
> #  define wait_here(x)  Sleep(x)  // delay in milliseconds
> #  define SCHED_YIELD   Sleep(0)
> #else
> #  include <sched.h>  // maybe necessary for sched_yield ?
> #  define wait_here(x)  usleep((x)*1000) // delay in milliseconds
> #  define SCHED_YIELD   sched_yield()
> #endif
>
> #define MAX_THRDS 20
>
> static int keep_running = -1;
> static int active_thrds = 0;
>
> static Fl_Double_Window *main_win=(Fl_Double_Window *)0;
> static Fl_Button *exit_bt=(Fl_Button *)0;
> static Fl_Button *add_bt=(Fl_Button *)0;
>
> void* thread_task(void* p) {
>      long id = (long)p;
>      printf("Start thread %ld\n", id); fflush(stdout);
>
>      while(keep_running) {
>          wait_here(1000); // delay for a second
>          printf("Hello from thread %ld\n", id); fflush(stdout);
>      }
>      return 0;
> }
>
> static void cb_exit_bt(Fl_Button*, void*) {
>       keep_running = 0;
>       main_win->hide();
> }
>
> static void cb_add_bt(Fl_Button*, void*) {
>      // add new thread button
>       if (active_thrds < MAX_THRDS) {
>           Fl_Thread thread_id;
>               active_thrds++;
>               fl_create_thread(thread_id, thread_task, (void *)active_thrds);
>       }
> }
>
> int main(int argc, char **argv) {
>      Fl::scheme("gtk+");
>       main_win = new Fl_Double_Window(316, 231, "Threads Tester");
>       exit_bt = new Fl_Button(230, 190, 64, 20, "Quit");
>       exit_bt->callback((Fl_Callback*)cb_exit_bt);
>
>       add_bt = new Fl_Button(15, 65, 64, 20, "Add");
>       add_bt->callback((Fl_Callback*)cb_add_bt); // add a callback to the
> add-thread button
>
>       main_win->end();
>       main_win->show(argc, argv);
>
>       keep_running = -1; // set this zero to kill all the child threads
>
>       return Fl::run();
> }

Thanks a lot. This was enough info for me to get it working. I appreciate the 
advice.

Tom


_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to