<?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[onclose &#x2F; onlosequery problem (unsolved but done)]]></title><description><![CDATA[<p>ich versteh die welt nimmer, ich drück das X in der ecke und das programm will net schliessen, kennt wer das phänomen ?<br />
ich weis ich sollte quelltext dazu posten, aber das ist mir leider nicht erlaubt.<br />
so hoffe ich das ihr mit der folgenden beschreibung was anfangen könnt.</p>
<p>das programm besteht im groben aus 4 klassen</p>
<p>-applikation<br />
-komponente mit<br />
main-klasse<br />
klasse die von thread erbt und übersetzungsroutninen beinhaltet (posix konforme zu VCL daten)<br />
klasse die den socket steuert ( besitzt eine readsocket methode die von der execute der threadklasse permanent ausgefühjrt wird)<br />
die main der komponente hat eine winproc methode mit der ich mittelst postmessage die daten aus dem socketthread auf den applicationthread synchronisiere. (ich weis das es da andere möglichkeiten gäbe !!! vielleicht liegt es auch daran)</p>
<p>ich kann über den socket zum server eine verbindung mit einme weiteren rechner aufnehmen (tunnelung mittels eigens entwickelter befehlsstruktur).<br />
wenn ich jetzt im onclose den befehl zum trennen der verbindung aufrufe kehrt dieser nach dem senden zurück aber das formular wird nicht geschlossen (cAction wurde auf cafree gesetzt)<br />
baue ich jetzt eine 5sekunden sleep nach dem closebefehl ein schliesst sich das fenster, habe ich keine weitere verbindung aufgebaut schliesst sich das fenster auch...</p>
<p>leiderleider keine quelltexte, aber ich bin echt verzweifelt... vielleicht hab ich ja was grundlegendes übersehen</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/173232/onclose-onlosequery-problem-unsolved-but-done</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 13:18:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/173232.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Feb 2007 09:22:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to onclose &#x2F; onlosequery problem (unsolved but done) on Tue, 13 Feb 2007 12:57:44 GMT]]></title><description><![CDATA[<p>ich versteh die welt nimmer, ich drück das X in der ecke und das programm will net schliessen, kennt wer das phänomen ?<br />
ich weis ich sollte quelltext dazu posten, aber das ist mir leider nicht erlaubt.<br />
so hoffe ich das ihr mit der folgenden beschreibung was anfangen könnt.</p>
<p>das programm besteht im groben aus 4 klassen</p>
<p>-applikation<br />
-komponente mit<br />
main-klasse<br />
klasse die von thread erbt und übersetzungsroutninen beinhaltet (posix konforme zu VCL daten)<br />
klasse die den socket steuert ( besitzt eine readsocket methode die von der execute der threadklasse permanent ausgefühjrt wird)<br />
die main der komponente hat eine winproc methode mit der ich mittelst postmessage die daten aus dem socketthread auf den applicationthread synchronisiere. (ich weis das es da andere möglichkeiten gäbe !!! vielleicht liegt es auch daran)</p>
<p>ich kann über den socket zum server eine verbindung mit einme weiteren rechner aufnehmen (tunnelung mittels eigens entwickelter befehlsstruktur).<br />
wenn ich jetzt im onclose den befehl zum trennen der verbindung aufrufe kehrt dieser nach dem senden zurück aber das formular wird nicht geschlossen (cAction wurde auf cafree gesetzt)<br />
baue ich jetzt eine 5sekunden sleep nach dem closebefehl ein schliesst sich das fenster, habe ich keine weitere verbindung aufgebaut schliesst sich das fenster auch...</p>
<p>leiderleider keine quelltexte, aber ich bin echt verzweifelt... vielleicht hab ich ja was grundlegendes übersehen</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1227932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1227932</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 13 Feb 2007 12:57:44 GMT</pubDate></item><item><title><![CDATA[Reply to onclose &#x2F; onlosequery problem (unsolved but done) on Tue, 13 Feb 2007 10:10:58 GMT]]></title><description><![CDATA[<p>Ich vermute es liegt an den Threads. Ich hab mit den VCL-Threads auch so meine Probleme gehabt. Die verhalten sich nicht, wie ich es erwarten würde, wenn man die Anwendung beendet. z.B. wird dann der Destruktor nicht mehr aufgerufen, respektive die Thread-Routine nicht sauber beendet. Sieht aus, als wäre es ein Timing Problem in der Terminate-Funktion des Threads. Der Thread hängt und scheint auf sich selbst zu warten und verbrät dabei alle verfügbare CPU-Zeit.</p>
<p>Ich habs damit gelöst, dass ich in den Threads WinAPI-Events verwende um dem Thread mitzuteilen, dass er beendet werden soll. Im MainForm einfach mit WaitForSingleObject() auf die Rückkehr warten, Thread::Terminate() aufrufen und ein Sleep(100) dahinter. Seitdem habe ich keine Probleme mehr mit den Threads.</p>
<pre><code class="language-cpp">__fastcall TFormMain::TFormMain(TComponent* Owner)
	: TForm(Owner)
{
	Controller = new TControllerThread(true);  // der Thread
	hEventGlobalTerminationRequest = Controller-&gt;GetGlobalTerminationRequestHandle(); // Event mit dem dem Thread mitgeteilt wird, das er sich beenden soll
	hControllerEventReadyForTermination = Controller-&gt;GetReadyForTerminationHandle(); // Event mit dem der Thread mitteilt, dass er bereit zum terminieren ist (nach durchlaufen des Clean-Up-Codes)

	while (Controller-&gt;Suspended)
		Controller-&gt;Resume();
}

__fastcall TFormMain::~TFormMain()
{
	SetEvent(hEventGlobalTerminationRequest);	// Beendigung des Threads einleiten
	WaitForSingleObject(hControllerEventReadyForTermination, INFINITE);
	Controller-&gt;Terminate();
	Sleep(100);
	Controller-&gt;WaitFor();
	delete Controller;
}
</code></pre>
<p>Im Thread werden die beiden Events erzeugt und natürlich muß im Thread auch, mittels WaitForSingleObject(), geprüft werden, ob das Event ausgelöst wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1227956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1227956</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 13 Feb 2007 10:10:58 GMT</pubDate></item><item><title><![CDATA[Reply to onclose &#x2F; onlosequery problem (unsolved but done) on Tue, 13 Feb 2007 11:36:54 GMT]]></title><description><![CDATA[<p>das ist nicht das problem, nach beendigung der formclose / closeformquery wird keiner der destruktoren (weder application noch irgendeiner) aufgerufen!! es scheint fast so als ob das signal zum beenden verloren geht O_o</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228019</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 13 Feb 2007 11:36:54 GMT</pubDate></item><item><title><![CDATA[Reply to onclose &#x2F; onlosequery problem (unsolved but done) on Tue, 13 Feb 2007 12:41:17 GMT]]></title><description><![CDATA[<p>Tja, ohne Code und ohne Kristallkugel...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228053</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 13 Feb 2007 12:41:17 GMT</pubDate></item><item><title><![CDATA[Reply to onclose &#x2F; onlosequery problem (unsolved but done) on Tue, 13 Feb 2007 12:56:57 GMT]]></title><description><![CDATA[<p>ja leider, hab das problem vorerst umgangen, aber gelöst leider nciht, vielleicht kann ich es mit einfacherem code reproduzieren und dann zur diskussion stellen ^^ thx trotzdem für die idee</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1228071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1228071</guid><dc:creator><![CDATA[Ceos]]></dc:creator><pubDate>Tue, 13 Feb 2007 12:56:57 GMT</pubDate></item></channel></rss>