On Sunday, 7 April 2019 at 17:52:40 UTC, Mike Wey wrote:


How are you using the GUI, GTK is not thread safe, all gui function calls should be made from the GUI thread.

Last time i checked threadsEnter and threadsLeave didn't work properly on windows.

All GUI updates are sent from a worker thread to the GUI thread using the D message passing system and immutable object arguments. I'm pretty satisfied it's not a problem.

The general principle of the classes doing the comms are:

class name :Thread
{
  Mutex m;
  Condition sig;
  shared char[] shared_buffer;
  CommunicationClass comm;

  this()
  {
    m = new Mutex;
    sig = new Condition(m);
    comm = new CommunicationClass;
    super(&receive_thread);
    start();
  }

  //the main routine being called
  void packet_transaction()
  {
    comm.send_data();
    synchronized(m)
    {
      if (sig.wait(dur!("seconds")(1)) == true)
        do_something();
      else
        do_timeout();
    }
  }

  void receive_thread()
  {
    local_buffer;
    while(true)
    {
      local_buffer += comm.get_data();
      if (some condition)
      {
        synchronized(m)
        {
          copy local_buffer to shared_buffer;
          sig.notify();
        }
      }
    }
  }
};

Reply via email to