+ // all we have to do to exit from the loop is to (maybe) wake it up so that
+ // it can notice that Exit() had been called
+ //
+ // in particular, we do *not* use PostQuitMessage() here because we're not
+ // sure that WM_QUIT is going to be processed by the correct event loop: it
+ // is possible that another one is started before this one has a chance to
+ // process WM_QUIT
+ ::PostMessage(NULL, WM_NULL, 0, 0);