>
> On 27 Apr 2011, at 18:39, kxng wrote:
>
> > Hello,
> >=20
> > I have a question that is not really about fltk, but hope to get some =
> helps or approaches from here.
> >=20
> > My program has two child threads, thread1 and thread2 spawned from the =
> main thread. when a button from the main thread is clicked, it checks =
> user's selections on three check boxes. The checks can be in any =
> combination, but they always be executed in sequence.
> >=20
> > Thread1 is in charge of running three heavy calculations and thread2 =
> is in charge of displaying results immediately after each calculation to =
> the GUI. I have both threads created in main in the suspended states. =
> When the button is clicked, thread1 starts doing his jobs. Once thread1 =
> finishes his first job, it resumes thread2 to update the results to the =
> screen. In the mean while, thread2 continues to do his second job.
> >=20
> > The question I have is how do I put thread2 to pause until thread1 =
> finishes his second job, then thread2 can update the results to screen, =
> then continue one in this fashion. I do not want to use busy wait loop, =
> because it will eat up lots of cpu time. What is the best approach here =
> in this case?
> >=20
> > Moreover, once thread1 finishes all his tasks, user can input =
> different parameters and restart the calculation again with different =
> selections.
> >=20
> >=20
> > My test code is as followed:
>
> Your test code is Windows specific, so I can't test it (you can easily =
> wrap Windows and Posix threads in wrappers to make your code portable, =
> BTW) but my observations are:
>
> - I'm not even sure you need the second thread, it is quite likely that =
> what it is doing could be better done by having thread1 trigger =
> callbacks in the main thread via the;
>
>   int Fl::awake       (Fl_Awake_Handler func, void *data =3D 0);
>
> method. This allows you to set a callback (executed in the main thread) =
> to do the display updates etc as appropriate. So thread1 can the trigger =
> those updates as required, and the updates themselves effectively happen =
> in the primary thread, thereby simplifying locking and so forth, and =
> essentially removing any chance of problems with updating the GUI form a =
> subsidiary thread.
>
> - If you are dead-set on using a second thread, then you probably need =
> to look at using some form of mutex to allow thread2 to block until =
> thread1 signals that data is ready. Repeatedly suspending and resuming =
> threads is seldom a good idea and is fraught with problems - simply =
> having thread2 block until there is something to do is far more likley =
> to be robust.
> Under Windows, you can do this in a number of ways, e.g. with a mutex or =
> a semaphore - though in this case a simple notification event object =
> might be the simplest.
> Have a brows around on MSDN, particularly the "Using Synchronization" =
> pages, and there are loads of examples in there to show you things to =
> try.
>
>
>


The reason why I need the second thread is later I might have to output the 
result more interactively (as soon as thread1 product 1 data point, I draw that 
data point to the screen), instead of waiting for all data points available 
before drawing.

I was thinking using Event object, but not familiar with it. I need more info 
about it if possible. Thanks,



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

Reply via email to