<?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[win Timer]]></title><description><![CDATA[<p>Hi</p>
<p>Ich habe jetzt schon eine Weile gesucht, auch in diesen Forum und bei google. Ich habe nichts gescheites gefunden.</p>
<p>Ich brauche einen Timer der mir unabhängig vom restlichen Programm, immer wieder eine Funktion aufruft. Der muss ich unglaublich genau sein, alle 10 ms +- 10 ms reicht vollkommen auf. bloß darf das warten darauf nicht das restliche Programm lahmlegen.</p>
<p>ich habe folgendes Programm gefunden (zwei Beispiele von mir zusammengefasst zu einen, hier aus den Forum):</p>
<pre><code class="language-cpp">void CALLBACK MyTimerProc(
    HWND hwnd,        // handle to window for timer messages
    UINT message,     // WM_TIMER message
    UINT idTimer,     // timer identifier
    DWORD dwTime)     // current system time
{
    printf(&quot;\nHallo.&quot;);

}

int main()
{
    UINT_PTR myTimer = SetTimer(
        0, //Handle zum Fenster (haben wir nicht)
        0, //Identifier für den Event (wenn's mehrere Timer pro Fenster gibt, aber wir haben ja kein Fenster...)
        1000, //Intervall auf 1000 Millisekunden (= 1 Sekunde)
        MyTimerProc); //Zeiger auf die Timer-Behandlungs-Funktion

    if(myTimer)
    {
		MSG myMessage;
		while(GetMessage(&amp;myMessage, 0, WM_TIMER, WM_TIMER))
        {
            DispatchMessage(&amp;myMessage); //empfangene Nachricht weiterleiten
            //mache irgendwas (oder auch nicht)
        } 
        KillTimer(0, myTimer);
    }
    else
		std::cout &lt;&lt; &quot;Timer konnte nicht erstellt werden.&quot; &lt;&lt; std::endl; 
}
</code></pre>
<p>doch da hängt die Anwendung in der while-schleife. mir würde es besser gefallen wenn die Funktion MyTimerProc, selbstständig aufgerufen wird, mit so eine art Interrupt.<br />
nun habe ich gelesen das kann man mit SetWaitableTimer, bloß die beispiele die ich gefunden habe machen das ähnlich mit einer Warteschleife <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>noch eine frage am rande, wie bekomme ich &quot;handle to main window&quot;(HWND) von meinen &quot;main window&quot;?</p>
<p>ich hoffe ihr könnt mir helfen. Danke schon mal für die Mühe des Lesens.</p>
<p>Gruß<br />
Lom</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188521/win-timer</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 16:20:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188521.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Aug 2007 11:49:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to win Timer on Wed, 01 Aug 2007 11:49:04 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich habe jetzt schon eine Weile gesucht, auch in diesen Forum und bei google. Ich habe nichts gescheites gefunden.</p>
<p>Ich brauche einen Timer der mir unabhängig vom restlichen Programm, immer wieder eine Funktion aufruft. Der muss ich unglaublich genau sein, alle 10 ms +- 10 ms reicht vollkommen auf. bloß darf das warten darauf nicht das restliche Programm lahmlegen.</p>
<p>ich habe folgendes Programm gefunden (zwei Beispiele von mir zusammengefasst zu einen, hier aus den Forum):</p>
<pre><code class="language-cpp">void CALLBACK MyTimerProc(
    HWND hwnd,        // handle to window for timer messages
    UINT message,     // WM_TIMER message
    UINT idTimer,     // timer identifier
    DWORD dwTime)     // current system time
{
    printf(&quot;\nHallo.&quot;);

}

int main()
{
    UINT_PTR myTimer = SetTimer(
        0, //Handle zum Fenster (haben wir nicht)
        0, //Identifier für den Event (wenn's mehrere Timer pro Fenster gibt, aber wir haben ja kein Fenster...)
        1000, //Intervall auf 1000 Millisekunden (= 1 Sekunde)
        MyTimerProc); //Zeiger auf die Timer-Behandlungs-Funktion

    if(myTimer)
    {
		MSG myMessage;
		while(GetMessage(&amp;myMessage, 0, WM_TIMER, WM_TIMER))
        {
            DispatchMessage(&amp;myMessage); //empfangene Nachricht weiterleiten
            //mache irgendwas (oder auch nicht)
        } 
        KillTimer(0, myTimer);
    }
    else
		std::cout &lt;&lt; &quot;Timer konnte nicht erstellt werden.&quot; &lt;&lt; std::endl; 
}
</code></pre>
<p>doch da hängt die Anwendung in der while-schleife. mir würde es besser gefallen wenn die Funktion MyTimerProc, selbstständig aufgerufen wird, mit so eine art Interrupt.<br />
nun habe ich gelesen das kann man mit SetWaitableTimer, bloß die beispiele die ich gefunden habe machen das ähnlich mit einer Warteschleife <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>noch eine frage am rande, wie bekomme ich &quot;handle to main window&quot;(HWND) von meinen &quot;main window&quot;?</p>
<p>ich hoffe ihr könnt mir helfen. Danke schon mal für die Mühe des Lesens.</p>
<p>Gruß<br />
Lom</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336457</guid><dc:creator><![CDATA[xlomx]]></dc:creator><pubDate>Wed, 01 Aug 2007 11:49:04 GMT</pubDate></item><item><title><![CDATA[Reply to win Timer on Wed, 01 Aug 2007 12:03:07 GMT]]></title><description><![CDATA[<p>Am einfachsten wäre es wenn du ein Fenster erzeugst um ein Window-handle zu haben. Das Konsolenfenster zu mißbrauchen wird vermutlich auch nicht wirklich klappen.</p>
<p>Oder mach nen zweiten Thread, warte da drin deine paar ms und ruf dann nach Ablauf der Wartezeit deine Funktion auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336471</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Wed, 01 Aug 2007 12:03:07 GMT</pubDate></item><item><title><![CDATA[Reply to win Timer on Wed, 01 Aug 2007 12:18:12 GMT]]></title><description><![CDATA[<p>ich möchte eine dll schreiben. das Konsolenprogramm ist nur zum testen. das mit den zweiten thread wäre natürlich eine Möglichkeit.</p>
<p>Ich wollte senden und empfangen (über USB) funktions und zeittechnisch voneinander trennen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1336488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1336488</guid><dc:creator><![CDATA[xlomx]]></dc:creator><pubDate>Wed, 01 Aug 2007 12:18:12 GMT</pubDate></item></channel></rss>