<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[SleepEx mit GetMessage]]></title><description><![CDATA[<p>Hallo,</p>
<p>SleepEx ist ja eine Funktion, die solange wartet, bis entweder die angegebenen Millisekunden abgelaufen sind, oder die IO-Funktion beendet ist.<br />
Gibt es eine Möglichkeit, SleepEx auch für GetMessage zu nutzen, sodass SleepEx auch zurückkehrt, sobald eine Nachricht abgerufen wurde?<br />
Also in etwa so:</p>
<pre><code class="language-cpp">while( 1 )
 {
    int millisLeft = 500;
    do
    {
     millisLeft = SleepEx(millisLeft, GetMessage( &amp;msg, NULL, 0, 0 ));
     if (millisLeft) //Nachricht wurde abgerufen, jetzt verarbeiten
     {
      if (msg.message == WM_KEYDOWN)
      {
       if (msg.wParam == VK_ESCAPE)
       {
         quitGame = 1;
         break;
       }
      }
      TranslateMessage(&amp;msg);
      DispatchMessage(&amp;msg);
     }
    } while (millisLeft);
    if (quitGame) break;
}
</code></pre>
<p>Danke schonmal,</p>
<p>Rufus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/169131/sleepex-mit-getmessage</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Jul 2026 22:48:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169131.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Jan 2007 12:50:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to SleepEx mit GetMessage on Tue, 02 Jan 2007 12:50:21 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>SleepEx ist ja eine Funktion, die solange wartet, bis entweder die angegebenen Millisekunden abgelaufen sind, oder die IO-Funktion beendet ist.<br />
Gibt es eine Möglichkeit, SleepEx auch für GetMessage zu nutzen, sodass SleepEx auch zurückkehrt, sobald eine Nachricht abgerufen wurde?<br />
Also in etwa so:</p>
<pre><code class="language-cpp">while( 1 )
 {
    int millisLeft = 500;
    do
    {
     millisLeft = SleepEx(millisLeft, GetMessage( &amp;msg, NULL, 0, 0 ));
     if (millisLeft) //Nachricht wurde abgerufen, jetzt verarbeiten
     {
      if (msg.message == WM_KEYDOWN)
      {
       if (msg.wParam == VK_ESCAPE)
       {
         quitGame = 1;
         break;
       }
      }
      TranslateMessage(&amp;msg);
      DispatchMessage(&amp;msg);
     }
    } while (millisLeft);
    if (quitGame) break;
}
</code></pre>
<p>Danke schonmal,</p>
<p>Rufus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1201082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201082</guid><dc:creator><![CDATA[Rufushome]]></dc:creator><pubDate>Tue, 02 Jan 2007 12:50:21 GMT</pubDate></item><item><title><![CDATA[Reply to SleepEx mit GetMessage on Tue, 02 Jan 2007 13:13:34 GMT]]></title><description><![CDATA[<p>Dazu kanst Du MsgWaitForMultipleObjects verwenden indem Du einfach kein Objekt zum weiteren Warten angibst!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1201107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201107</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 02 Jan 2007 13:13:34 GMT</pubDate></item><item><title><![CDATA[Reply to SleepEx mit GetMessage on Tue, 02 Jan 2007 21:09:37 GMT]]></title><description><![CDATA[<p>WaitMessage</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1201471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1201471</guid><dc:creator><![CDATA[falsche antwort]]></dc:creator><pubDate>Tue, 02 Jan 2007 21:09:37 GMT</pubDate></item><item><title><![CDATA[Reply to SleepEx mit GetMessage on Wed, 03 Jan 2007 18:54:50 GMT]]></title><description><![CDATA[<p>Danke für die Antworten, aber mit WaitMessage komm ich nicht weiter und mit MsgWaitForMultipleObjects weiß ich nicht wie ich das anwenden muss, was macht die Funktion genau? was sind das für Objekte? ich hätt es jetzt mal so versucht:</p>
<pre><code class="language-cpp">while( 1 )
 {
    int millisLeft = 500;
    int result;
    do
    {
     result = MsgWaitForMultipleObjects(0, NULL, 0, millisLeft, QS_ALLINPUT );
     if (result == WAIT_TIMEOUT)
     {
      GetMessage( &amp;msg, NULL, 0, 0 );
      if (msg.message == WM_KEYDOWN)
      {
       if (msg.wParam == VK_ESCAPE)
       {
         quitGame = 1;
         break;
       }
      }
      TranslateMessage(&amp;msg);
      DispatchMessage(&amp;msg);
     }
    } while (result != WAIT_TIMEOUT);
}
</code></pre>
<p>Allerdings funktioniert das so nicht. Wie muss man das machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1202178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1202178</guid><dc:creator><![CDATA[Rufushome]]></dc:creator><pubDate>Wed, 03 Jan 2007 18:54:50 GMT</pubDate></item><item><title><![CDATA[Reply to SleepEx mit GetMessage on Wed, 03 Jan 2007 19:11:45 GMT]]></title><description><![CDATA[<p>Kannst du mal beschreiben was du da überhaupt vorhast? Das sieht schon ziemlich merkwürdig aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1202187</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1202187</guid><dc:creator><![CDATA[5]]></dc:creator><pubDate>Wed, 03 Jan 2007 19:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to SleepEx mit GetMessage on Wed, 03 Jan 2007 20:21:04 GMT]]></title><description><![CDATA[<p>Wenn das Ergebnis &quot;WAIT_TIMEOUT&quot; war, dann wurde in dieser Zeit *keine* Nachricht empfangen... also solltest Du lieber</p>
<pre><code class="language-cpp">if (result != WAIT_TIMEOUT)
     {
      GetMessage( &amp;msg, NULL, 0, 0 );
      if (msg.message == WM_KEYDOWN)
      {
       if (msg.wParam == VK_ESCAPE)
       {
         quitGame = 1;
         break;
       }
      }
      TranslateMessage(&amp;msg);
      DispatchMessage(&amp;msg);
     }
</code></pre>
<p>verwenden....<br />
PS: Für was brauchst Du überhaupt den Timeout?<br />
PPS: Ob das überhaupt ohne Wait-Handle geht....</p>
<p>PPPS: Das was Du machen willst, kannst Du auch ganz ohne MsgWait... machen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1202225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1202225</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 03 Jan 2007 20:21:04 GMT</pubDate></item><item><title><![CDATA[Reply to SleepEx mit GetMessage on Thu, 04 Jan 2007 00:50:48 GMT]]></title><description><![CDATA[<p>@5<br />
Ich programmiere zur Zeit ein Tetris-Spiel. Dazu will ich in bestimmten Zeitabständen den Block immer um eins nach unten verschieben. Allerdings kann dazwischen natürlich der Block gedreht und verschoben werden, also muss ich auch das abprüfen.</p>
<p>Ich hab es jetzt so gelöst, ganz zufrieden bin ich aber nicht:</p>
<pre><code class="language-cpp">while( 1 )
 {
    int millisToWait = 1500;
    DWORD start;
    do
    {
     start = GetTickCount();
     MsgWaitForMultipleObjects(0, NULL, 0, millisToWait, QS_KEY );
     millisToWait -= GetTickCount() - start;
     if (millisToWait &gt; 0)  //Nachricht vorhanden
     {
      GetMessage( &amp;msg, NULL, 0, 0 );
      if (msg.message == WM_KEYDOWN)
      {
       switch (msg.wParam)
       {
        case VK_ESCAPE: quitGame = 1;
                        break;
        case VK_LEFT:   spiel.translateBlock();
                        ausgabe &lt;&lt; &quot;links wurde gedrückt...&quot; &lt;&lt; endl;
                        break;
        case VK_RIGHT:  spiel.rotateBlock(1);
                        ausgabe &lt;&lt; &quot;rechts wurde gedrückt...&quot; &lt;&lt; endl;
                        break;
        case VK_UP:     spiel.rotateBlock();
                        break;
       }
       if (msg.wParam == VK_UP || msg.wParam == VK_LEFT || msg.wParam == VK_RIGHT)
        redraw(feld);
      }
      TranslateMessage(&amp;msg);
      DispatchMessage(&amp;msg);
     }
    } while (millisToWait &gt; 0);

    spiel.updatePos();
    redraw(feld);

    if (spiel.finished() || quitGame) break;

 }
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/5675">@Jochen</a><br />
Du hast geschrieben ich bräuchte dazu kein MsgWait, welche Alternativen gibt es?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1202361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1202361</guid><dc:creator><![CDATA[Rufushome]]></dc:creator><pubDate>Thu, 04 Jan 2007 00:50:48 GMT</pubDate></item><item><title><![CDATA[Reply to SleepEx mit GetMessage on Thu, 04 Jan 2007 07:13:21 GMT]]></title><description><![CDATA[<p>Was soll den dies!?</p>
<pre><code class="language-cpp">if (millisToWait &gt; 0)  //Nachricht vorhanden
</code></pre>
<p>Hast Du Dir jemals die Doku zu MsgWaitFor... durchgelesen!?????</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1202390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1202390</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Thu, 04 Jan 2007 07:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to SleepEx mit GetMessage on Thu, 04 Jan 2007 07:48:38 GMT]]></title><description><![CDATA[<p>Im Internet gibt es genug Anleitungen darüber wie man die Nachrichtenschleife für Spiele gestaltet. So gut wie alle benutzen PeekMessage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1202406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1202406</guid><dc:creator><![CDATA[......]]></dc:creator><pubDate>Thu, 04 Jan 2007 07:48:38 GMT</pubDate></item><item><title><![CDATA[Reply to SleepEx mit GetMessage on Thu, 04 Jan 2007 15:22:51 GMT]]></title><description><![CDATA[<p>Wie wärs mit nem Timer ?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1202814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1202814</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Thu, 04 Jan 2007 15:22:51 GMT</pubDate></item></channel></rss>