<?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[Thread - Verständnis]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ein Thread erzeugt wird, wird doch automatisch die Methode &quot;Execute&quot; aufgerufen.<br />
Frage: Wird dieser Thread, nachdem &quot;Execute&quot; abgearbeitet wurde, automatisch beendet, oder muss man am Ende von &quot;Execute&quot; einen Befehl (Terminate?) eingeben, um den Thread zu beenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/102542/thread-verständnis</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 17:41:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/102542.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 27 Feb 2005 10:09:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread - Verständnis on Sun, 27 Feb 2005 10:09:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>wenn ein Thread erzeugt wird, wird doch automatisch die Methode &quot;Execute&quot; aufgerufen.<br />
Frage: Wird dieser Thread, nachdem &quot;Execute&quot; abgearbeitet wurde, automatisch beendet, oder muss man am Ende von &quot;Execute&quot; einen Befehl (Terminate?) eingeben, um den Thread zu beenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/733316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/733316</guid><dc:creator><![CDATA[williman]]></dc:creator><pubDate>Sun, 27 Feb 2005 10:09:13 GMT</pubDate></item><item><title><![CDATA[Reply to Thread - Verständnis on Sun, 27 Feb 2005 11:03:23 GMT]]></title><description><![CDATA[<p>Execute wird automatisch gestartet, wenn CreateSuspended als false angegeben wird!</p>
<p>Bei CreateSuspended als true muss manuell gestartet werden - mit Resume() !!!</p>
<p>Der Thread laeuft solange bis:</p>
<p>a) Terminate gerufen wird<br />
b) Execute in einer Schleife laeuft</p>
<p>!!!!!!!!!!!!!!!!!!!!<br />
In der Schleife MUSS eine Abfrage zu Terminated erfolgen. Wenn True, dann MUSS die Schleife beendet werden - das MUSS vom Programmierer so geschrieben werden.<br />
Anderenfalls wird der Thread nicht ordentlich beendet.<br />
!!!!!!!!!!!!!!!!!!!!</p>
<p>Am Ende muss der Thread deletet werden, WENN FreeOnTerminate auf false steht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/733360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/733360</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Sun, 27 Feb 2005 11:03:23 GMT</pubDate></item><item><title><![CDATA[Reply to Thread - Verständnis on Sun, 27 Feb 2005 11:56:33 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnelle Antwort. Habe auch in der Hilfe in Zwischenzeit dazu mehr gefunden.</p>
<p>Jetzt aber zu einem Thread-Problem:<br />
Ich erzeuge von meinem &quot;Form1&quot; aus einen neuen Thread:</p>
<pre><code>TPing *SecondProcess = new TPing(false);
</code></pre>
<p>Unter &quot;Execute&quot; im Thread habe ich folgenden Code eingetragen, der einen Ping an einen Rechner im Netzwerk schicken und auswerten soll:</p>
<pre><code>try    //Ping an Rechner abschicken
   {
     while (!Terminated)
     {
       PingAntwortZeit = PingHost(Form1-&gt;aktuellerrechnername-&gt;Caption, NULL);
       //angepingter PC am Netz?
       if (PingAntwortZeit!=-1)    //wenn PC am Netz:
         Form1-&gt;aktuellerrechnerstatus-&gt;Caption=&quot;PC_im_Netz&quot;;
       else
         Form1-&gt;aktuellerrechnerstatus-&gt;Caption=&quot;PC_nicht_im_Netz&quot;;  //wenn nicht im Netz:
</code></pre>
<p>Dabei wird auf die Form1-Komponente &quot;aktuellerrechnername&quot; und &quot;aktuellerrechnerstatus&quot; zugegriffen.<br />
1. Frage: muss man an dieser Stelle eigentlich auf Threadsicherheit achten (wie in der Hilfe beschrieben)? Wenn ja, wie realisiere ich diese Threadsicherheit?<br />
2. Frage: wie kann ich vom Form1-Quelltext aus vor der Erzeugung eines neuen Threads abfragen, ob noch ein vorher erzeugter Thread am laufen ist, um dann auf dessen Ende zu warten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/733403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/733403</guid><dc:creator><![CDATA[williman]]></dc:creator><pubDate>Sun, 27 Feb 2005 11:56:33 GMT</pubDate></item><item><title><![CDATA[Reply to Thread - Verständnis on Sun, 27 Feb 2005 12:55:07 GMT]]></title><description><![CDATA[<p>1. Ja. Synchronize</p>
<p>2. Mach ne Variable in Form1 die am Anfang von Execute gesetzt und am Ende (NACH Schleife) zurueckgesetzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/733450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/733450</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Sun, 27 Feb 2005 12:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Thread - Verständnis on Sun, 27 Feb 2005 14:16:20 GMT]]></title><description><![CDATA[<p>Danke!!!</p>
<p>Ich habe jetzt den Thread geändert, dass er einmal erzeugt wird und die Befehle unter Execute in einer While-Schleife immer wiederholt werden (bis terminated).</p>
<p>Jetzt möchte ich den Thread im Quelltext von Form1 manchmal anhalten u. dann wieder weiterlaufen lassen.<br />
Mit folgendem Code erzeuge ich zu Beginn des Programms den Thread und starte diesen.</p>
<pre><code>TPing *SecondProcess = new TPing(true); // Thread erzeugen
 SecondProcess-&gt;Priority = tpLower; // niedrigere Priorität setzen
 SecondProcess-&gt;Resume(); // Thread jetzt ausführen
</code></pre>
<p>Trage ich an einer anderen Stelle im Quelltext von Form1 ein</p>
<pre><code>SecondProcess-&gt;Suspend(); // PingThread jetzt anhalten
</code></pre>
<p>dann bringt mir der Compiler die Fehlermeldung &quot;Undefiniertes Symbol 'SecondProcess'&quot;.</p>
<p>Wie muss ich denn den Suspend-Befehl realisieren???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/733511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/733511</guid><dc:creator><![CDATA[williman]]></dc:creator><pubDate>Sun, 27 Feb 2005 14:16:20 GMT</pubDate></item><item><title><![CDATA[Reply to Thread - Verständnis on Sun, 27 Feb 2005 14:20:14 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>SecondProcess ist doch wohl eine lokale Variable</p>
<p>Was kann man da tun (hat was mit *.h zutun)</p>
<p>MfG<br />
Klaus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/733518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/733518</guid><dc:creator><![CDATA[KlausB]]></dc:creator><pubDate>Sun, 27 Feb 2005 14:20:14 GMT</pubDate></item><item><title><![CDATA[Reply to Thread - Verständnis on Mon, 28 Feb 2005 08:35:10 GMT]]></title><description><![CDATA[<p>Ich habe aber bereits in der Unit von Form1 die Thread-Unit included.Innerhalb einer Methode von Form1 kennt er ja auch die Variable.<br />
Jedoch in einer eigens erstellten Funktion &quot;void __fastcall NextPing()&quot; erkennt er diese nicht, obwohl ich in der Form1.h unter public die Deklaration &quot;void __fastcall NextPing(void)&quot; eingetragen habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/734060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/734060</guid><dc:creator><![CDATA[williman]]></dc:creator><pubDate>Mon, 28 Feb 2005 08:35:10 GMT</pubDate></item><item><title><![CDATA[Reply to Thread - Verständnis on Tue, 01 Mar 2005 12:02:30 GMT]]></title><description><![CDATA[<p>Du musst zunächst im Header von Form1 die Instanz &quot;TPing *SecondProcess&quot;<br />
erzeugen, somit ist der Objectzeiger im gesamten Code bekannt.<br />
In dem Header sollte auch noch eine vorward referenz &quot;class TPing&quot; mit eingefügt werden, damit der Datentyp TPing bekannt ist.<br />
Nun kannst du in deinem Code ein Object &quot;SecondProcess = new TPing(true)&quot;erzeugen.</p>
<pre><code class="language-cpp">class TPing;           //vorward referenz 
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
  .......
           private:	// Anwender-Deklarationen
           TPing *SecondProcess;        //Instanz erzeugen
 .........
};
</code></pre>
<p>[/cpp]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/735020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/735020</guid><dc:creator><![CDATA[hermes]]></dc:creator><pubDate>Tue, 01 Mar 2005 12:02:30 GMT</pubDate></item></channel></rss>