Temporary fix suggested by Ulrich to allow the
MsgWaitForMultipleObject method to be called from 16 bit threads.

diff --git a/windows/message.c b/windows/message.c
index b0f4ab9..2910079 100644
--- a/windows/message.c
+++ b/windows/message.c
@@ -1669,10 +1669,62 @@
     msgQueue->changeBits = 0;
     msgQueue->wakeMask = dwWakeMask;
 
+    if (THREAD_IsWin16(THREAD_Current()))
+    {
+      /*
+       * This is a temporary solution to a big problem.
+       * You see, the main thread of all Win32 programs is created as a 16 bit
+       * task. This means that if you want on an event using Win32 synchronization
+       * methods, the 16 bit scheduler is stopped and things might just stop happening.
+       * This implements a semi-busy loop that checks the handles to wait on and
+       * also the message queue. When either one is ready, the wait function returns.
+       *
+       * This will all go away when the real Win32 threads are implemented for all
+       * the threads of an applications. Including the main thread.
+       */
+      DWORD curTime = GetCurrentTime32();
+
+      do
+      {
+	/*
+	 * Check the handles in the list.
+	 */
+	ret = WaitForMultipleObjects(nCount, pHandles, fWaitAll, 5L);
+
+	/*
+	 * If the handles have been triggered, return.
+	 */
+	if (ret != WAIT_TIMEOUT)
+	  break;
+
+	/*
+	 * Then, let the 16 bit scheduler do it's thing.
+	 */
+	Yield16();
+
+	/*
+	 * If a message matching the wait mask has arrived, return.
+	 */
+	if (msgQueue->changeBits & dwWakeMask)
+	{
+	  ret = nCount;
+	  break;
+	}
+
+	/*
+	 * And continue doing this until we hit the timeout.
+	 */
+      } while ((dwMilliseconds == INFINITE32) || (GetCurrentTime32()-curTime < dwMilliseconds) );
+    }
+    else
+    {
     /* Add the thread event to the handle list */
-    for (i = 0; i < nCount; i++) handles[i] = pHandles[i];
+      for (i = 0; i < nCount; i++)
+	handles[i] = pHandles[i];
     handles[nCount] = msgQueue->hEvent;
+
     ret = WaitForMultipleObjects( nCount+1, handles, fWaitAll, dwMilliseconds );
+    } 
 
     QUEUE_Unlock( msgQueue );