<?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[SetTimer in Bedingung]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe folgende Klasse geschrieben (hier nur relevanter Code).</p>
<p>Klasse.h</p>
<pre><code class="language-cpp"># define TryReconnectInterval 1000 

class Klasse
{
	private:
		bool TimerReconnectEnabled;
		void EnableTimerReconnect();
		void TryReconnect();
		DWORD TimerIDReconnect;

		static void CALLBACK TryReconnectCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);

...
...

}
</code></pre>
<p>Klasse.cpp</p>
<pre><code class="language-cpp">void CALLBACK Klasse::TryReconnectCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
	printf(&quot;Test %i&quot;, 1);
}

void Klasse::EnableTimerReconnect()
{
	if(TimerReconnectEnabled)
	{
	}
	else
	{
		TimerReconnectEnabled = true;
        TimerIDReconnect = SetTimer(NULL, NULL, TryReconnectInterval, TryReconnectCallback);
	}
}
</code></pre>
<p>Das Programm erzeugt den Timer (Breakpoint gesetzt), jedoch wird so die Callback Funktion nie aufgerufen. Wenn ich die Funktion SetTimer nicht in der Bedingung aufrufe, wird die Callback Funktion wie erwartet jede Sekunde aufgerufen.</p>
<pre><code class="language-cpp">void Klasse::EnableTimerReconnect()
{
	TimerIDReconnect = SetTimer(NULL, NULL, TryReconnectInterval, TryReconnectCallback);

	if(TimerReconnectEnabled)
	{
	}
	else
	{
		TimerReconnectEnabled = true;

	}
}
</code></pre>
<p>Woran liegt das? Habe ich etwas übersehen?<br />
Vielen Dank</p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/216943/settimer-in-bedingung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 13:09:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/216943.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 01 Jul 2008 06:49:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to SetTimer in Bedingung on Tue, 01 Jul 2008 06:49:00 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich habe folgende Klasse geschrieben (hier nur relevanter Code).</p>
<p>Klasse.h</p>
<pre><code class="language-cpp"># define TryReconnectInterval 1000 

class Klasse
{
	private:
		bool TimerReconnectEnabled;
		void EnableTimerReconnect();
		void TryReconnect();
		DWORD TimerIDReconnect;

		static void CALLBACK TryReconnectCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);

...
...

}
</code></pre>
<p>Klasse.cpp</p>
<pre><code class="language-cpp">void CALLBACK Klasse::TryReconnectCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
	printf(&quot;Test %i&quot;, 1);
}

void Klasse::EnableTimerReconnect()
{
	if(TimerReconnectEnabled)
	{
	}
	else
	{
		TimerReconnectEnabled = true;
        TimerIDReconnect = SetTimer(NULL, NULL, TryReconnectInterval, TryReconnectCallback);
	}
}
</code></pre>
<p>Das Programm erzeugt den Timer (Breakpoint gesetzt), jedoch wird so die Callback Funktion nie aufgerufen. Wenn ich die Funktion SetTimer nicht in der Bedingung aufrufe, wird die Callback Funktion wie erwartet jede Sekunde aufgerufen.</p>
<pre><code class="language-cpp">void Klasse::EnableTimerReconnect()
{
	TimerIDReconnect = SetTimer(NULL, NULL, TryReconnectInterval, TryReconnectCallback);

	if(TimerReconnectEnabled)
	{
	}
	else
	{
		TimerReconnectEnabled = true;

	}
}
</code></pre>
<p>Woran liegt das? Habe ich etwas übersehen?<br />
Vielen Dank</p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538898</guid><dc:creator><![CDATA[Wilder]]></dc:creator><pubDate>Tue, 01 Jul 2008 06:49:00 GMT</pubDate></item><item><title><![CDATA[Reply to SetTimer in Bedingung on Tue, 01 Jul 2008 06:54:45 GMT]]></title><description><![CDATA[<p>vll die reihenfolge von</p>
<pre><code class="language-cpp">TimerReconnectEnabled = true;
</code></pre>
<p>und</p>
<pre><code class="language-cpp">TimerIDReconnect = SetTimer(NULL, NULL, TryReconnectInterval, TryReconnectCallback);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1538904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538904</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 01 Jul 2008 06:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to SetTimer in Bedingung on Tue, 01 Jul 2008 06:59:10 GMT]]></title><description><![CDATA[<p>Wird TimerReconnectEnabled überhaupt irgendwo initialisiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538907</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 01 Jul 2008 06:59:10 GMT</pubDate></item><item><title><![CDATA[Reply to SetTimer in Bedingung on Tue, 01 Jul 2008 07:04:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Diese Antwort habe ich jetzt leider nicht verstanden...<br />
Habs mal so probiert und es kommt das selbe raus:</p>
<pre><code class="language-cpp">void Klasse::EnableTimerReconnect()
{
    if(TimerReconnectEnabled)
    {
    }
    else
    {
        TimerIDReconnect = SetTimer(NULL, NULL, TryReconnectInterval, TryReconnectCallback);
        TimerReconnectEnabled = true;
    }
}
</code></pre>
<p>TimerReconnectEnabled wird im Konstruktor initialisiert. Und wie schon gesagt, der Programmteil wird erreicht (Breakpoint gesetzt)!!!</p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1538912</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1538912</guid><dc:creator><![CDATA[Wilder]]></dc:creator><pubDate>Tue, 01 Jul 2008 07:04:26 GMT</pubDate></item><item><title><![CDATA[Reply to SetTimer in Bedingung on Tue, 01 Jul 2008 17:13:13 GMT]]></title><description><![CDATA[<p>Ist Dir klar, dass Deine Callback-Funktion _statisch_ ist, Du aus dieser Callback also keinen Zugriff auf die Instanz Deiner Klasse hast, welche den Timer initialisiert hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539254</guid><dc:creator><![CDATA[_mgs]]></dc:creator><pubDate>Tue, 01 Jul 2008 17:13:13 GMT</pubDate></item><item><title><![CDATA[Reply to SetTimer in Bedingung on Wed, 02 Jul 2008 06:01:24 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Vielen Dank für den Hinweis. Das habe ich auch gemerkt, aber die Callback Funktion muss statisch sein so wie ich das verstanden habe. Wenn ich jetzt auf meine Klasse zugreifen möchte muss ich einen globalen Klassenpointer definieren.<br />
Gibt es dazu auch eine bessere Lösung?</p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539418</guid><dc:creator><![CDATA[Wilder]]></dc:creator><pubDate>Wed, 02 Jul 2008 06:01:24 GMT</pubDate></item><item><title><![CDATA[Reply to SetTimer in Bedingung on Wed, 02 Jul 2008 10:17:25 GMT]]></title><description><![CDATA[<p>Nur eine Idee, noch nicht ausprobiert:</p>
<p>Schau mal, ob die TimerId in SetTimer an die TimerProc weitergegeben wird, auch wenn kein hWnd gegeben ist (wird aus Doku nicht klar). Falls ja, könntest Du eine statische Liste in Deiner Timer-Klasse anlegen, die beim Aufruf von SetTimer die TimerId und den Zeiger auf die Instanz der Klasse erhält. In der TimerProc kannst Du dann dann die Klasseninstanz anhand der TimerId aus der Liste holen (einfach drauf casten).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539559</guid><dc:creator><![CDATA[_mgs]]></dc:creator><pubDate>Wed, 02 Jul 2008 10:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to SetTimer in Bedingung on Wed, 02 Jul 2008 11:21:55 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Diese Idee hatte ich auch schon, aber wie es in der Doku steht, wird dieser Parameter ignoriert und auch nicht weitergegeben wenn hWnd = NULL.</p>
<p>Grüsse</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1539611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1539611</guid><dc:creator><![CDATA[Wilder]]></dc:creator><pubDate>Wed, 02 Jul 2008 11:21:55 GMT</pubDate></item></channel></rss>