Multi-threaded GUI

Simon s.d.hammett at gmail.com
Wed Jul 25 11:50:51 PDT 2012


On 25/07/2012 19:34, Gor Gyolchanyan wrote:
> Hi!
>
> I'm trying to write a WinAPI example to have multi-threaded GUI. I wanna
> have a Window class, which creates a window and listens to its messages
> in a separate thread when constructed.  This will allow me to write a
> main function like this:
>
> void main()
> {
>      Window w = new Window;
>      w.move(100, 200);
>      w.resize(800, 600);
>      w.show();
> }
>
> The methods called for the window will send asynchronous messages, which
> will cause the window to change its position, size and visibility
> on-the-fly. This is convenient, because no message loop needs to be
> launched separately and every window will rocess its messages in a
> separate thread.
>
> Can anyone please tell me how to achieve this?
>
> --
> Bye,
> Gor Gyolchanyan.

It depends exactly on what you are trying to do, but in general:

You have to be very, very careful with trying to do multi threading w/ 
windoze windows. Try doing a google search on it, and the advice is 
invariably: don't do multi threaded windows. Everybody including people 
famous for their in-depth window knowledge recommends a single thread UI 
with non-UI worker threads.

Having completely separate top level windows each in it's own thread is 
ok, but if you want to have a parent/child relation between windows in 
different threads, then you can not use any thread synchronisation 
primitives all at other than MsgWaitForMultipleObjectsEx, otherwise you 
will have a guaranteed deadlock. In which case you'd have to do all of 
the threading your self and not use anything in phobos.

-- 
My enormous talent is exceeded only by my outrageous laziness.
http://www.ssTk.co.uk




More information about the Digitalmars-d mailing list