<?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[Zeitliche Verzoegerung in MFC durch Sleep?]]></title><description><![CDATA[<p>Hallo Zusammen!</p>
<p>ich versuche gerade in mein Program ein zeitliche Verzoegerung reinzubringen. Es geht um ein einfaches Spiel wo der Computer nach seiner Entscheidung 2 Sekunden warten soll, bevor er das Brett mit seinem entschiedenen Zug wiedermalt. Dadurch schafft man ja der &quot;denkende Gegner&quot; effekt. Das Warten wollte ich mit Sleep realizieren.</p>
<p>void CDreiGewView::OnLButtonDown(UINT nFlags, CPoint point)<br />
{</p>
<p>..............</p>
<p>// Benutzer moechte offentsichlich einen Zug machen.<br />
// So es kann nur mit einem X bezeichnet werden.<br />
// Nur klicks auf leere Felder akzeptieren<br />
if( pDoc-&gt;m_acBrett[I][J] == ' '){<br />
pDoc-&gt;m_acBrett[I][J] = 'X' ;</p>
<p>// AnalysiereBrett() sucht nur fuer bevorstehenden Verlust,bevorstehenden<br />
// Gewinn, Verlust oder Gewinn.<br />
pDoc-&gt;AnalysiereBrett() ;</p>
<p>// Aktualisiere alle Ansichten<br />
pDoc-&gt;UpdateAllViews(NULL);</p>
<p>// Nach pDoc-&gt;AnalysiereBrett das Algorithmus macht<br />
// seinen Zug auch.<br />
if(pDoc-&gt;m_cSpielStatus == ' '){<br />
// Dies ist die Stelle wo der Computer seinen Zug macht.<br />
pDoc-&gt;m_acBrett[pDoc-&gt;m_nBesterI][pDoc-&gt;m_nBesterJ] = '0';<br />
// Gewinn,Verlust ?<br />
pDoc-&gt;AnalysiereBrett() ;<br />
}</p>
<p>// Geh schlafen , der Denkarbeit-Effekt des Computers.<br />
Sleep(2000) ;<br />
// Aktualisere den Ansicht ;<br />
pDoc-&gt;UpdateAllViews(NULL) ;<br />
}</p>
<p>// Rekursiv aufruf von LeftButtonDown als Event-Handler<br />
CView::OnLButtonDown(nFlags, point);<br />
}</p>
<p>Egal an welcher Stelle ich den Sleep(2000) reinbringe, gibt das Spiel nicht das Effekt was ich habe moechte. Ich klicke, das Program wartet 2 Sekunden, und zeigt mir danach mein und sein Zug gleich hintereinander..</p>
<p>Ich denke es ist ein MFC gebundene Kleinigkeit, die ich uebersehe.</p>
<p>Meine Frage ist: Wie kann ich die LButtonDown Funktion dazu beibringen: mein zug anzeigen-&gt;2 sekunden warten -&gt; sein zug anzeigen ??</p>
<p>Danke im voraus,<br />
jsbach</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/199985/zeitliche-verzoegerung-in-mfc-durch-sleep</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Apr 2026 17:08:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/199985.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Dec 2007 13:01:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeitliche Verzoegerung in MFC durch Sleep? on Sun, 09 Dec 2007 13:01:44 GMT]]></title><description><![CDATA[<p>Hallo Zusammen!</p>
<p>ich versuche gerade in mein Program ein zeitliche Verzoegerung reinzubringen. Es geht um ein einfaches Spiel wo der Computer nach seiner Entscheidung 2 Sekunden warten soll, bevor er das Brett mit seinem entschiedenen Zug wiedermalt. Dadurch schafft man ja der &quot;denkende Gegner&quot; effekt. Das Warten wollte ich mit Sleep realizieren.</p>
<p>void CDreiGewView::OnLButtonDown(UINT nFlags, CPoint point)<br />
{</p>
<p>..............</p>
<p>// Benutzer moechte offentsichlich einen Zug machen.<br />
// So es kann nur mit einem X bezeichnet werden.<br />
// Nur klicks auf leere Felder akzeptieren<br />
if( pDoc-&gt;m_acBrett[I][J] == ' '){<br />
pDoc-&gt;m_acBrett[I][J] = 'X' ;</p>
<p>// AnalysiereBrett() sucht nur fuer bevorstehenden Verlust,bevorstehenden<br />
// Gewinn, Verlust oder Gewinn.<br />
pDoc-&gt;AnalysiereBrett() ;</p>
<p>// Aktualisiere alle Ansichten<br />
pDoc-&gt;UpdateAllViews(NULL);</p>
<p>// Nach pDoc-&gt;AnalysiereBrett das Algorithmus macht<br />
// seinen Zug auch.<br />
if(pDoc-&gt;m_cSpielStatus == ' '){<br />
// Dies ist die Stelle wo der Computer seinen Zug macht.<br />
pDoc-&gt;m_acBrett[pDoc-&gt;m_nBesterI][pDoc-&gt;m_nBesterJ] = '0';<br />
// Gewinn,Verlust ?<br />
pDoc-&gt;AnalysiereBrett() ;<br />
}</p>
<p>// Geh schlafen , der Denkarbeit-Effekt des Computers.<br />
Sleep(2000) ;<br />
// Aktualisere den Ansicht ;<br />
pDoc-&gt;UpdateAllViews(NULL) ;<br />
}</p>
<p>// Rekursiv aufruf von LeftButtonDown als Event-Handler<br />
CView::OnLButtonDown(nFlags, point);<br />
}</p>
<p>Egal an welcher Stelle ich den Sleep(2000) reinbringe, gibt das Spiel nicht das Effekt was ich habe moechte. Ich klicke, das Program wartet 2 Sekunden, und zeigt mir danach mein und sein Zug gleich hintereinander..</p>
<p>Ich denke es ist ein MFC gebundene Kleinigkeit, die ich uebersehe.</p>
<p>Meine Frage ist: Wie kann ich die LButtonDown Funktion dazu beibringen: mein zug anzeigen-&gt;2 sekunden warten -&gt; sein zug anzeigen ??</p>
<p>Danke im voraus,<br />
jsbach</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417536</guid><dc:creator><![CDATA[jsbach]]></dc:creator><pubDate>Sun, 09 Dec 2007 13:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitliche Verzoegerung in MFC durch Sleep? on Sun, 09 Dec 2007 14:58:59 GMT]]></title><description><![CDATA[<p>Vergiss Sleep an solch einer Stelle. Dadurch wird das Spiel unbedienbar in dieser Zeit und reagiert nicht, malt sich nicht mal neu, wenn es verdeckt wurde.</p>
<p>Verwende einen Timer (SetTmer).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417610</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sun, 09 Dec 2007 14:58:59 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitliche Verzoegerung in MFC durch Sleep? on Sun, 09 Dec 2007 21:51:52 GMT]]></title><description><![CDATA[<p>was martin meint...</p>
<p>während sleep werden keine nachrichten abgearbeitet. also wird das fenster nicht gezeichnet, man kann nichts anklicken, etc...</p>
<p>entweder einen timer oder noch besser einen thread der sowas handelt.</p>
<p>Stefan</p>
<p>PS: schau auch mal den Thread &quot;Unterdialog wir nach 5 sek. weiß......&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417844</guid><dc:creator><![CDATA[StefanKittel]]></dc:creator><pubDate>Sun, 09 Dec 2007 21:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitliche Verzoegerung in MFC durch Sleep? on Mon, 10 Dec 2007 01:23:21 GMT]]></title><description><![CDATA[<p>Tach zusammen,</p>
<p>danke fuer die Antwort. Also, ich habe mit Martin's Variante ausprobiert.</p>
<p>Der SetTimer() zaehlt hoch und dann schickt eine Nachricht was von onTimer() verarbeitet wird.</p>
<p>Mit dieser Logik habe ich SetTimer Aufruf &amp; onTimer() procedure eingebaut. Nun gibt's kaum Unterschied im Vergleich zu dem frueheren Zustand:</p>
<p>void CDreiGewView::OnLButtonDown(UINT nFlags, CPoint point)<br />
{<br />
............<br />
// Benutzer moechte offentsichlich einen Zug machen.<br />
// So es kann nur mit einem X bezeichnet werden.<br />
// Nur klicks auf leere Felder akzeptieren<br />
if( pDoc-&gt;m_acBrett[I][J] == ' '){<br />
pDoc-&gt;m_acBrett[I][J] = 'X' ;<br />
pDoc-&gt;AnalysiereBrett() ;</p>
<p>/// BENUTZER'S ZUG WIRD GEMALT<br />
pDoc-&gt;UpdateAllViews(NULL);</p>
<p>// Nach pDoc-&gt;AnalysiereBrett das Algorithmus macht<br />
// seinen Zug auch.<br />
if(pDoc-&gt;m_cSpielStatus == ' '){</p>
<p>pDoc-&gt;m_acBrett[pDoc-&gt;m_nBesterI][pDoc-&gt;m_nBesterJ] = '0';<br />
pDoc-&gt;AnalysiereBrett() ;<br />
}</p>
<p>UINT my_timer ;<br />
// Timer has set-up it counts to 2 secs and<br />
// sends WM_ON_TIMER to the OnTimer ;<br />
my_timer = SetTimer(1,2000,NULL) ;</p>
<p>}</p>
<p>CView::OnLButtonDown(nFlags, point);<br />
}</p>
<p>void CDreiGewView::OnTimer(UINT_PTR nIDEvent)<br />
{<br />
// TODO: Add your message handler code here and/or call default</p>
<p>CDreiGewDoc *pDoc = GetDocument() ;<br />
ASSERT_VALID(pDoc) ;</p>
<p>//COMPUTER'S ZUG WIRD GEMALT<br />
pDoc-&gt;UpdateAllViews(NULL);</p>
<p>//VORHANDENER TIMER WIRD GEKILLT<br />
KillTimer(nIDEvent) ;<br />
}</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/483">@Stefan</a>: ich habe den Mail-Thread angeschaut. Threading ist mir genauso neuland wie der Fragestellender ;).</p>
<p>Sowie SetTimer() definiert ist, muesste sie die Aufgabe leicht erledigen.. Was ist bei SetTimer() Ausfuehrung falsch?</p>
<p>Gruss,<br />
jsbach</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417885</guid><dc:creator><![CDATA[jsbach]]></dc:creator><pubDate>Mon, 10 Dec 2007 01:23:21 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitliche Verzoegerung in MFC durch Sleep? on Mon, 10 Dec 2007 05:05:35 GMT]]></title><description><![CDATA[<p>du hast das prinzip des Timers wohl nich gant verstanden... zudem ist ein timer für diese problemchen nicht unbedingt die beste variante</p>
<p>bau an der stell wo du normalerweise dein slepp machen willst eine</p>
<p>while schleife ein, welche 2 sek durchlaufen wird, zudmen rufst du bei jeder 10ten schleifeniteration die message-queue auf, so das die nachrichten des system immer noch abgearbeitet werden...</p>
<p>Implementiere diese funktion</p>
<pre><code class="language-cpp">void SleepWithEvents(){

for(long iter=0; iter&lt; 1000000; iter++){

    if(iter%100==0){  
       MSG dispatch;
       while (::PeekMessage( &amp;dispatch, NULL, 0, 0, PM_NOREMOVE)){
        if (!AfxGetThread()-&gt;PumpMessage());
      }
    }
}

}
</code></pre>
<p>Die iterationanzahl muss so angepasst werden das die schleife 2 sek. braucht</p>
<p>EDIT: theortisch könntem man noch die zeit messen in der schleife und sie solange duchkaufen bis bis die gewünschte wartezeit erreicht ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417888</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Mon, 10 Dec 2007 05:05:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitliche Verzoegerung in MFC durch Sleep? on Mon, 10 Dec 2007 08:50:43 GMT]]></title><description><![CDATA[<p>Anstatt den Iterationen aber lieber GetTickCount verwenden. Das ist genauer und vor allem unabhängig von der Leistungsfähigkeit des Rechners.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417940</guid><dc:creator><![CDATA[sri]]></dc:creator><pubDate>Mon, 10 Dec 2007 08:50:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitliche Verzoegerung in MFC durch Sleep? on Mon, 10 Dec 2007 08:53:39 GMT]]></title><description><![CDATA[<p>Sehe ich auch so. So in etwa alle 100ms nachsehen ob eine Nachricht da ist langt für einfacher UI-Interaktionen vollkommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417941</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 10 Dec 2007 08:53:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitliche Verzoegerung in MFC durch Sleep? on Mon, 10 Dec 2007 09:53:10 GMT]]></title><description><![CDATA[<p>jo das meinte ich mit Zeit abfragen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1417975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1417975</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Mon, 10 Dec 2007 09:53:10 GMT</pubDate></item></channel></rss>