title: Multithreaded application with gtkD
body: <p>I'm playing with gtkD for a while, and I'm learning D2/Phobos in parallel. Yesterday I was looking up the std.concurrency module and tried to write a toy multithreaded fractal viewer, but the problem is that I can't see the way multithreading works with gtkD. </p>
  
  <p>Now, I have this:</p>
  
  <pre><code>import std.concurrency;
  
  class TestMainWindow : MainWindow
  {
      this() {
          super("test");
          ...
          spawn(&amp;worker);
      }
  
      public void notify() {
          m_progress.pulse();
      }
  
      private ProgressBar m_progress;
  }
  
  shared(TestMainWindow) window;
  
  main(string[] args) {
      Main.init(args);
      window = new shared(TestMainWindow)();
      Main.run();
  }
  
  void worker() {
      for (int i = 0; i &lt; 20; ++i) {
          (cast(TestMainWindow) window).notify();
          Thread.sleep(dur!"msecs"(200));
      }
  }
  </code></pre>
  
  <p>In the Andrei's book, in the chapter for concurrency, there's the message passing paradigm, which I want to
  apply, but the problem is that the gtk main loop is hidden from me. I don't like the above code, because its
  ugly to cast to non-shared and likely unsafe.
  So is there some way to inherit a "thread-agnostic" class, making it thread-aware, and what is the 
  standard mechanism in gtkD to program multithreaded applications? I've seen the gthread.Thread module, 
  but its role seems to be only as an interface to the external C gtk+ threading capabilities.</p>