RE: Does gtk have issues with STL?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> Hi,
> I'm interested to know more about that. 
> Is there some source code example that I can follow?
> --
> JP

The pattern that Mathias supplied is a good one for "C".  Since we are
talking STL, here is a rough sketch of the pattern that I follow for
"C++".  Of course, there are many good ways to do it, and you should
change this pattern to match your requirements.  For example, you may
want a thread-safe singleton task queue to handle batches of tasks in
one event.  But don't forget the golden rule of event loop based gui
programs: To keep the gui responsive to the user, each event needs to be
handled quickly.

-Anthony Vallone


//------------------------------------------------------------  

// call this before gtk_main to tell glib that you are multithreaded.
g_thread_init(NULL);

// define a task interface
class GuiTask {
public:
  virtual void process() = 0;
  virtual ~GuiTask() {}
};

// implementations of the task interface to suit your needs
class LongComputationResultsX : public GuiTask {
public:
  LongComputationResultsX(results and handlers) {...}
  virtual void process() {use results and handlers to update the widgets
and state}
  virtual ~LongComputationResultsX() {...}
private:
  results and handlers
};
class LongComputationResultsY..., Z..., etc...

// this will get called in the main event loop thread
extern "C" gboolean idleTaskFunction(gpointer userData)
  GuiTask* task = (GuiTask*)userData;
  task->process();
  delete task;
  return false;
}

// when the worker thread has something to supply to the main thread, 
// call this from the worker thread
g_idle_add(&idleTaskFunction, new LongComputationResultsX(stuff));


//------------------------------------------------------------ 
_______________________________________________
gtk-list mailing list
gtk-list@xxxxxxxxx
http://mail.gnome.org/mailman/listinfo/gtk-list

[Index of Archives]     [Touch Screen Library]     [GIMP Users]     [Gnome]     [KDE]     [Yosemite News]     [Steve's Art]

  Powered by Linux