<?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[Timer richtig starten und Nebenläufigkeit von Threads]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich bin hier am umprogrammieren eines UltraVNC-Servers und komme alleine nicht mehr weiter. Was ich probieren will ist folgendes:<br />
Sobald sich ein Benutzer verbindet soll ein Timer gestartet werden, der nach zwei Stunden die Verbindung trennt. Soweit so gut, habe den Punkt auch gefunden, wo ich den Timer starten soll. Da ich aber hier kein Window-Handle habe (weil der Server kein Main-Window hat...), habe ich folgendes probiert:</p>
<pre><code class="language-cpp">SetTimer(NULL, 1, 2000, (TIMERPROC) TimerProc);
</code></pre>
<p>Das sollte jetzt (für ein leeres Window-Handle) alle zwei Sekunden (für Testzwecke) die Funktion TimerProc aufrufen. Tut es aber nicht. Nach langem googlen hab ich rausgefunden, dass man durch Aufrufen einer MessageBox nach dem SetTimer den Timer starten kann, weil das (Achtung, ab hier keine Ahnung mehr wovon ich rede!) dann ein Event zur MessageQueue hinzufügt oder so ähnlich.<br />
Und so funktioniert der Timer:</p>
<pre><code class="language-cpp">SetTimer(NULL, 1, 2000, (TIMERPROC) TimerProc);
MessageBox(NULL, &quot;Bla&quot;, &quot;Fasel&quot;, MB_OK);
</code></pre>
<p>Nun möchte ich aber nicht bei jeder eingehenden Verbindung eine MessageBox auf dem Server haben, deswegen hier die Frage:<br />
Kann ich irgendwie bzw. wie kann ich ein Event an die MessageQueue hängen ohne eine MessageBox? Hab mich schon mal mit PostMessage(...) gespielt, aber ich hab von MFC ziemlich wenig Ahnung, deswegen komm ich wohl auch auf keinen grünen Zweig.</p>
<p>Eine andere Methode die ich noch probiert habe, war das Starten eines Threads:</p>
<pre><code class="language-cpp">CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunction(connectionBegin), NULL, 0, &amp;dwThreadID);
</code></pre>
<p>Das hat zwar funktioniert, jedoch hat der Server solange angehalten bis die Funktion ThreadFunction(...) beendet war. Und irgendwie ist das ja nicht der Sinn eines Threads, der sollte doch &quot;nebenher&quot; laufen?</p>
<p>Seht mir meine Unwissenheit nach, aber ich hab nie wirklich viel mit MFC gearbeitet, und weder Google noch die Forumssuche haben mir was einleuchtendes gebracht.</p>
<p>Danke für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170155/timer-richtig-starten-und-nebenläufigkeit-von-threads</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 12:21:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170155.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Jan 2007 11:03:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Timer richtig starten und Nebenläufigkeit von Threads on Fri, 12 Jan 2007 11:03:47 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich bin hier am umprogrammieren eines UltraVNC-Servers und komme alleine nicht mehr weiter. Was ich probieren will ist folgendes:<br />
Sobald sich ein Benutzer verbindet soll ein Timer gestartet werden, der nach zwei Stunden die Verbindung trennt. Soweit so gut, habe den Punkt auch gefunden, wo ich den Timer starten soll. Da ich aber hier kein Window-Handle habe (weil der Server kein Main-Window hat...), habe ich folgendes probiert:</p>
<pre><code class="language-cpp">SetTimer(NULL, 1, 2000, (TIMERPROC) TimerProc);
</code></pre>
<p>Das sollte jetzt (für ein leeres Window-Handle) alle zwei Sekunden (für Testzwecke) die Funktion TimerProc aufrufen. Tut es aber nicht. Nach langem googlen hab ich rausgefunden, dass man durch Aufrufen einer MessageBox nach dem SetTimer den Timer starten kann, weil das (Achtung, ab hier keine Ahnung mehr wovon ich rede!) dann ein Event zur MessageQueue hinzufügt oder so ähnlich.<br />
Und so funktioniert der Timer:</p>
<pre><code class="language-cpp">SetTimer(NULL, 1, 2000, (TIMERPROC) TimerProc);
MessageBox(NULL, &quot;Bla&quot;, &quot;Fasel&quot;, MB_OK);
</code></pre>
<p>Nun möchte ich aber nicht bei jeder eingehenden Verbindung eine MessageBox auf dem Server haben, deswegen hier die Frage:<br />
Kann ich irgendwie bzw. wie kann ich ein Event an die MessageQueue hängen ohne eine MessageBox? Hab mich schon mal mit PostMessage(...) gespielt, aber ich hab von MFC ziemlich wenig Ahnung, deswegen komm ich wohl auch auf keinen grünen Zweig.</p>
<p>Eine andere Methode die ich noch probiert habe, war das Starten eines Threads:</p>
<pre><code class="language-cpp">CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFunction(connectionBegin), NULL, 0, &amp;dwThreadID);
</code></pre>
<p>Das hat zwar funktioniert, jedoch hat der Server solange angehalten bis die Funktion ThreadFunction(...) beendet war. Und irgendwie ist das ja nicht der Sinn eines Threads, der sollte doch &quot;nebenher&quot; laufen?</p>
<p>Seht mir meine Unwissenheit nach, aber ich hab nie wirklich viel mit MFC gearbeitet, und weder Google noch die Forumssuche haben mir was einleuchtendes gebracht.</p>
<p>Danke für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208592</guid><dc:creator><![CDATA[DerSchorsch]]></dc:creator><pubDate>Fri, 12 Jan 2007 11:03:47 GMT</pubDate></item><item><title><![CDATA[Reply to Timer richtig starten und Nebenläufigkeit von Threads on Fri, 12 Jan 2007 12:43:10 GMT]]></title><description><![CDATA[<p>Timer und TimerProc's laufen nur, wenn auch eine MessageQueue läuft. Wen keine MessageQueue läuft gibt es auch keine Timer-Events und keine Einsprünge in die TimerProc!</p>
<p>Dein Problem mit dem Thread kapiere ich nicht, was heißt &quot;jedoch hat der Server solange angehalten&quot;?<br />
Was hast Du denn in Deinem Mainthread gemacht? Was hast Du in dem Thread gemacht?</p>
<p>Ich würde für jede Verbindung einen eigenen Thread starten.<br />
In der Schleife in der auf die Nachrichten/Infos gewartet wird würde ich regelmässig prüfen wie lange die Verbindung steht, dazu brauche ich keinen Timer!</p>
<p>Ich kenne zuwenig von Deiner Infrastruktur und wie Eriegnisse und nachricten eigentlich von Server zu Client laufen um Dir hier weiter helfen zu können!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1208672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1208672</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 12 Jan 2007 12:43:10 GMT</pubDate></item><item><title><![CDATA[Reply to Timer richtig starten und Nebenläufigkeit von Threads on Sat, 13 Jan 2007 07:35:59 GMT]]></title><description><![CDATA[<p>Sorry für die späte Antwort, war recht beschäftigt gestern.</p>
<blockquote>
<p>Dein Problem mit dem Thread kapiere ich nicht, was heißt &quot;jedoch hat der Server solange angehalten&quot;?</p>
</blockquote>
<p>Also: der VNC-Server empfängt eine Verbindung. Sobald diese eingeht, wird der Timer gestartet und sofort sollte der Client die gewünschte Remoteverbindung erhalten (sprich: er bekommt den Remote-Desktop angezeigt).<br />
Aus Sicht des Servers:<br />
Client kommt --&gt; Timer starten --&gt; Remotedesktop anzeigen --&gt; nach zwei Stunden beenden<br />
Aus Sicht des Clients:<br />
Verbindung herstellen --&gt; Remotedesktop sehen.</p>
<p>Was allerdings passiert, ist folgendes: Der Server erhält die Verbindung und startet den Thread, in dem er ständig nach der Zeit gefragt wird und die Differenz zum Verbindungseingang berechnet wird. Allerdings wird dem Client der Remotedesktop erst angezeigt, wenn der Thread abgeaarbeitet ist, also nach zwei Stunden:<br />
Client kommt --&gt; Timer starten --&gt; 2 Stunden warten --&gt; beenden</p>
<p>Und genau das ist das Problem mit dem Thread. Der sollte doch normalerweise nebenher laufen, so daß der Client den Remotedesktop sofort zu sehen bekommt, und die 2-Stunden-Routine im Hintergrund weiterläuft.</p>
<blockquote>
<p>Timer und TimerProc's laufen nur, wenn auch eine MessageQueue läuft. Wen keine MessageQueue läuft gibt es auch keine Timer-Events und keine Einsprünge in die TimerProc!</p>
</blockquote>
<p>Kann ich mir irgendwie selbst so eine MessageQueue erstellen damit das doch funktioniert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209143</guid><dc:creator><![CDATA[DerSchorsch]]></dc:creator><pubDate>Sat, 13 Jan 2007 07:35:59 GMT</pubDate></item><item><title><![CDATA[Reply to Timer richtig starten und Nebenläufigkeit von Threads on Sat, 13 Jan 2007 08:04:05 GMT]]></title><description><![CDATA[<p>Ohne zu wissen, was bei Dir wie blockiert kann ich Dir nicht helfen.<br />
Wenn Du einen Prozess hast, der keine MessageQueue hat dann kanst Du auch nicht unbedingt nachträglich eine einbauen. Das geht nurunter bestimmten umständen.</p>
<p>Und ja ein Thread läuft nebenher, nur:<br />
1. Wenn Du Funktionen aufrufst die andere Threads oder Objekte anderer Threads beineinflussen, dann blockiert er.<br />
2. Fenster sind thread-afin. D.h. Fensternachrichten werden nur direkt versendet, wenn es aus dem eigenen Thread geschieht. Sonst wird die Nachricht in die Message-Queue gestellt.<br />
3. Wenn der Desktop angezeigt wird wenn der Timer abgelaufen ist, dann hast Du irgendein anderes Problem.</p>
<p>Lösung:<br />
1. Zeige uns was von Deinem Code.<br />
2. Lerne mehr über Windows! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209145</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 13 Jan 2007 08:04:05 GMT</pubDate></item><item><title><![CDATA[Reply to Timer richtig starten und Nebenläufigkeit von Threads on Sat, 13 Jan 2007 09:01:11 GMT]]></title><description><![CDATA[<blockquote>
<p>3. Wenn der Desktop angezeigt wird wenn der Timer abgelaufen ist, dann hast Du irgendein anderes Problem.</p>
</blockquote>
<p>Nene, tut er nicht. Das funktioniert schon wie's sollte.</p>
<blockquote>
<p>Wenn Du einen Prozess hast, der keine MessageQueue hat dann kanst Du auch nicht unbedingt nachträglich eine einbauen. Das geht nurunter bestimmten umständen.</p>
</blockquote>
<p>Danke, damit ist die Sache wenigstens klar. Code kann ich keinen liefern weil die Firma am Wochenende zu ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Ich denke mal ich werd dann weitergooglen, werds schon noch hinbekommen. Danke für die Hilfe.</p>
<blockquote>
<p>2. Lerne mehr über Windows! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
</blockquote>
<p>s/Windows/MFC/g</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1209159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1209159</guid><dc:creator><![CDATA[DerSchorsch]]></dc:creator><pubDate>Sat, 13 Jan 2007 09:01:11 GMT</pubDate></item></channel></rss>