<?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 über TTimer abschiessen]]></title><description><![CDATA[<p>Es geht noch um mein WinAPI-Problem <a href="http://www.c-plusplus.net/forum/viewtopic.php?t=99344" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic.php?t=99344</a>. Auch wenn es nicht so scheint, ist das Problem mit toten Prozessen wirklich ernst!</p>
<p>Ich habe jetzt folgenden Ansatz versucht: Die Module-Abfrage läuft über einen Thread. Über TTimer schieße ich nach 2 Sekunden den Thread ab, wenn er zu keinem Ergebnis gekommen ist.</p>
<p>Funktioniert aber leider so nicht:</p>
<p><strong>tmoduleinfo.cpp</strong></p>
<pre><code class="language-cpp">__fastcall thgetModule::thgetModule(bool CreateSuspended, int ProcHandle)
  : TThread(CreateSuspended)
{
   FreeOnTerminate = true;
   m_hModuleSnap = INVALID_HANDLE_VALUE;
   m_ProcHandle = ProcHandle;
}
//---------------------------------------------------------------------------
void __fastcall thgetModule::Execute()
{
  //---- Hier den Thread-Code plazieren----
  //Endlosschleife für Test
  while (true)
  {
    //Nachträglich eingefügt:
    if (Terminated)
      break;

    Application-&gt;ProcessMessages();
    m_hModuleSnap = INVALID_HANDLE_VALUE;
  }
  //hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
}
//---------------------------------------------------------------------------

void __fastcall thgetModule::OnTerminate (TObject *Sender)
{
  m_hModuleSnap = INVALID_HANDLE_VALUE;
}
</code></pre>
<p><strong>tprocess.cpp</strong></p>
<pre><code class="language-cpp">TProcessList::TProcessList()
{
  ProcessList = new TStringList();
  m_timer = new TTimer(NULL);
  m_timer-&gt;Interval = 2000;
  m_timer-&gt;Enabled = false;
  m_timer-&gt;OnTimer = thgetModuleTimer;
  getProcessList();
}

int TProcessList::getProcessList()
{
  ...
      HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
      m_thgetModule = new thgetModule (false, pe32.th32ProcessID);
      if (m_thgetModule)
      {
        m_timer-&gt;Enabled = true;
        //Thread starten
        m_thgetModule-&gt;WaitFor();
        hModuleSnap = m_thgetModule-&gt;m_hModuleSnap;
        delete m_thgetModule;
        m_timer-&gt;Enabled = false;
      }
  ...
}

void __fastcall TProcessList::thgetModuleTimer(TObject *Sender)
{
  m_timer-&gt;Enabled = false;
  //Thread abschiessen
  if (m_thgetModule)
    m_thgetModule-&gt;Terminate();
}
</code></pre>
<p>Der Code ist auf das Wesentliche gekürzt. Leider fehlt mir sowohl in der Thread-Programmierung unter VCL als auch die Komponentenverwendung ohne Formulare die Erfahrung.</p>
<p>Das Problem: Der Timer-Event kommt nie an. Liegt es am Thread oder an einer falschen Initialisierung des Timers?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/99437/thread-über-ttimer-abschiessen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 14:10:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/99437.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Jan 2005 11:28:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 13:03:35 GMT]]></title><description><![CDATA[<p>Es geht noch um mein WinAPI-Problem <a href="http://www.c-plusplus.net/forum/viewtopic.php?t=99344" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic.php?t=99344</a>. Auch wenn es nicht so scheint, ist das Problem mit toten Prozessen wirklich ernst!</p>
<p>Ich habe jetzt folgenden Ansatz versucht: Die Module-Abfrage läuft über einen Thread. Über TTimer schieße ich nach 2 Sekunden den Thread ab, wenn er zu keinem Ergebnis gekommen ist.</p>
<p>Funktioniert aber leider so nicht:</p>
<p><strong>tmoduleinfo.cpp</strong></p>
<pre><code class="language-cpp">__fastcall thgetModule::thgetModule(bool CreateSuspended, int ProcHandle)
  : TThread(CreateSuspended)
{
   FreeOnTerminate = true;
   m_hModuleSnap = INVALID_HANDLE_VALUE;
   m_ProcHandle = ProcHandle;
}
//---------------------------------------------------------------------------
void __fastcall thgetModule::Execute()
{
  //---- Hier den Thread-Code plazieren----
  //Endlosschleife für Test
  while (true)
  {
    //Nachträglich eingefügt:
    if (Terminated)
      break;

    Application-&gt;ProcessMessages();
    m_hModuleSnap = INVALID_HANDLE_VALUE;
  }
  //hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
}
//---------------------------------------------------------------------------

void __fastcall thgetModule::OnTerminate (TObject *Sender)
{
  m_hModuleSnap = INVALID_HANDLE_VALUE;
}
</code></pre>
<p><strong>tprocess.cpp</strong></p>
<pre><code class="language-cpp">TProcessList::TProcessList()
{
  ProcessList = new TStringList();
  m_timer = new TTimer(NULL);
  m_timer-&gt;Interval = 2000;
  m_timer-&gt;Enabled = false;
  m_timer-&gt;OnTimer = thgetModuleTimer;
  getProcessList();
}

int TProcessList::getProcessList()
{
  ...
      HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
      m_thgetModule = new thgetModule (false, pe32.th32ProcessID);
      if (m_thgetModule)
      {
        m_timer-&gt;Enabled = true;
        //Thread starten
        m_thgetModule-&gt;WaitFor();
        hModuleSnap = m_thgetModule-&gt;m_hModuleSnap;
        delete m_thgetModule;
        m_timer-&gt;Enabled = false;
      }
  ...
}

void __fastcall TProcessList::thgetModuleTimer(TObject *Sender)
{
  m_timer-&gt;Enabled = false;
  //Thread abschiessen
  if (m_thgetModule)
    m_thgetModule-&gt;Terminate();
}
</code></pre>
<p>Der Code ist auf das Wesentliche gekürzt. Leider fehlt mir sowohl in der Thread-Programmierung unter VCL als auch die Komponentenverwendung ohne Formulare die Erfahrung.</p>
<p>Das Problem: Der Timer-Event kommt nie an. Liegt es am Thread oder an einer falschen Initialisierung des Timers?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708632</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708632</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:03:35 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 12:28:42 GMT]]></title><description><![CDATA[<p>hm, die Timerimplementierung sieht ok aus.<br />
Wird die Zeile m_timer-&gt;Enabled = true; ausgeführt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708690</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Jan 2005 12:28:42 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 12:30:58 GMT]]></title><description><![CDATA[<p>jap</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708694</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 12:30:58 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 12:33:48 GMT]]></title><description><![CDATA[<p>Hallo Manfred Schmidtke,<br />
kann es sein, dass dein Thread nicht 2 Sekunden benötigt und der Timer bereits disabled ist?</p>
<p>Evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708700</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Fri, 28 Jan 2005 12:33:48 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 12:39:13 GMT]]></title><description><![CDATA[<p>In diesem Falle kaum. Execute kann sich wegen einer Endlosschleife garnicht beenden und läuft auch fröhlich nach Stunden weiter. Die Endlos-Schleife ist auch nur zum Test eingebaut, weil dies einfacher ist, als einen toten Prozess unter Windoof zu erzeugen.</p>
<p>Nachtrag: Liegt es vielleicht an der NULL für den Owner, was kann ich ohne Formular da sonst angeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708706</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 12:39:13 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 12:51:26 GMT]]></title><description><![CDATA[<p>nein, an dem NULL liegt es nicht.<br />
Du überprüfst in Deiner Threadroutine die Eigenschaft Terminated?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708727</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Jan 2005 12:51:26 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 12:57:24 GMT]]></title><description><![CDATA[<p>Ich denke da ist der Kern des Übels Joe_M. hat glaube ich Recht denn in der Hilfe steht:</p>
<p>Terminate setzt die Eigenschaft Terminated des Thread auf true und signalisiert, daß der Thread so bald wie möglich beendet werden sollte. Im Gegensatz zu der Windows-API-Methode TerminateThread, die den Thread sofort beendet, fordert die Methode Terminate den Abbruch des Thread nur an. Dadurch kann der Thread vor seiner Beendigung noch erforderliche Aufräumarbeiten durchführen.</p>
<p>Die Methode Execute eines Threads sowie alle von Execute aufgerufenen Methoden sollten die Eigenschaft Terminated regelmäßig abfragen und die Ausführung gegebenenfalls beenden.</p>
<p>Evi48</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708736</guid><dc:creator><![CDATA[evi48]]></dc:creator><pubDate>Fri, 28 Jan 2005 12:57:24 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 13:01:26 GMT]]></title><description><![CDATA[<p>Auf Terminated in Execute zu prüfen ist sicherlich sinnvoll und jetzt auch eingebaut. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Löst aber des eigentliche Problem nicht, da Terminated niemals gesetzt wird. Die Timer-Funktion erhält keinen Aufruf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708741</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:01:26 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 13:04:44 GMT]]></title><description><![CDATA[<p>Was steht denn in der Hilfe zu TThread::WaitFor()?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708747</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 13:16:24 GMT]]></title><description><![CDATA[<p>Es liegt offenbar nicht am Timer. Ich hab den ganzel Thread-Krempel in das Hauptformular übertragen und dort ganz normal eine Komponente angelegt.</p>
<p>Auch hier das gleiche Bild. Nach Aufruf von WaitFor geht nur noch Execute.</p>
<p>Die Idee war, den Thread von aussen abzuschießen. Dieser müsste doch unabhängig vom Hauptprogramm vor sich hin laufen. Warum kommt im Hauptprogramm kein Event an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708770</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:16:24 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 13:18:11 GMT]]></title><description><![CDATA[<p>ja eben, WaitFor wartet auf das Ende des Threads...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708775</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:18:11 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 13:22:52 GMT]]></title><description><![CDATA[<p>Dann ist die Thread-Kiste (zumindest über VCL) wohl ein Holzweg <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>Welche Möglichkeiten bleiben da noch? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/708783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708783</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 13:33:29 GMT]]></title><description><![CDATA[<p>Möglichkeiten für was denn überhaupt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708800</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:33:29 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 13:41:49 GMT]]></title><description><![CDATA[<p>Es geht darum, dass der auskommentierte Funktionsaufaufruf</p>
<pre><code class="language-cpp">CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pe32.th32ProcessID);
</code></pre>
<p>abstürzen kann, wenn th32ProcessID auf einen abgestürzten Prozess abfragt. Dieser Zustand ist sicherlich selten aber aufgrund der Anzahl der Anwender nicht tragbar.</p>
<p>Die bei diesem Aufruf ermittelten Informationen (es geht um den Ausführungspfad des Prozesses) sind zwar sinnvoll, aber im Einzelfall (eben Absturz des Prozesses) nicht so wichtig.</p>
<p>Ich muss daher in der Lage sein, den Funktionsaufruf irgendwie zu canceln. Ähnlich der Windows-Funktion &quot;... Anwendung reagiert nicht mehr&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708807</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:41:49 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 13:47:29 GMT]]></title><description><![CDATA[<p>Nachdem mir jetzt auch klar ist, dass die Hauptanwendung bei WaitFor nix mehr tut außer zu warten, den Timer in den Thread selbst verlagert.</p>
<p>Jetzt aber die Überraschung: Auch hier gibt es kein Timer-Event!!</p>
<p>Ist Application-&gt;ProcessMessages hier falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708826</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 13:53:04 GMT]]></title><description><![CDATA[<p>Schau Dir mal die WinAPI Funktion WaitForSingleObject an, ich denke das ist das, was Du suchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708835</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:53:04 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 14:31:03 GMT]]></title><description><![CDATA[<p>Vielen Dank an Joe_M und alle Anderen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>So läufts:</p>
<pre><code class="language-cpp">HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
      m_thgetModule = new thgetModule (false, pe32.th32ProcessID);
      if (m_thgetModule)
      {
        //Auf Ende Warten
        WaitForSingleObject ((HANDLE) m_thgetModule-&gt;Handle, 2000);
        //Thread anhalten
        m_thgetModule-&gt;Suspend();
        //Ergebnis holen
        hModuleSnap = m_thgetModule-&gt;m_hModuleSnap;
        //Thread beenden
        m_thgetModule-&gt;Terminate();
        delete m_thgetModule;
      }
</code></pre>
<p>Kein Timer mehr!</p>
<p>Der Aufruf des Constructors mit false macht aber lustige Sachen. Der Thread startet, noch während der Constructor arbeitet!??!</p>
<p>Suspend ist notwendig, da es sonst ein Timinig-Problem mit Terminate() gibt und es knallt beim Delete.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708876</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 14:31:03 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 15:50:58 GMT]]></title><description><![CDATA[<p>Manfred Schmidtke schrieb:</p>
<blockquote>
<p>Suspend ist notwendig, da es sonst ein Timinig-Problem mit Terminate() gibt und es knallt beim Delete.</p>
</blockquote>
<p>???<br />
Hast Du überhaupt schon mal in die Hilfe zu TThread geschaut?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708952</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Jan 2005 15:50:58 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 16:27:47 GMT]]></title><description><![CDATA[<p>Selbstverfreilich. Aber</p>
<blockquote>
<p>Terminate ruft die Funktion PostQuitMessage der Windows-API auf, um die Anwendung kontrolliert zu beenden. Die Methode Terminate wirkt somit nicht direkt.</p>
</blockquote>
<p>Mag ja sein, dass ich ein bisschen begriffsstutzig bin, aber der Hilfe kann ich immernoch nicht entnehmen, dass ein Aufruf von Suspend vor Terminate und delete notwendig ist. Wie dem auch sein, darauf bin ich ja schließlich auch selbst gekommen.</p>
<p>Klar ist mir jedoch weiterhin nicht, warum das Timer-Event auch innerhalb des Threads nicht gefunzt hat.</p>
<p>Aber was solls, funzt mit WaitForSingleObject prima und wesentlich einfacher. Nochmals Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/709004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/709004</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 16:27:47 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 16:43:08 GMT]]></title><description><![CDATA[<p>Dieses Zitat ist aus der Hilfe zu TApplication::Terminate(), in der Hilfe zu TThread steht etwas anderes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/709013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/709013</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Jan 2005 16:43:08 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 17:30:20 GMT]]></title><description><![CDATA[<p>Sorry, falsch kopiert (aber richtig gelesen!).</p>
<blockquote>
<p>Terminate setzt die Eigenschaft Terminated des Thread auf true und signalisiert, daß der Thread so bald wie möglich beendet werden sollte. Im Gegensatz zu der Windows-API-Methode TerminateThread, die den Thread sofort beendet, fordert die Methode Terminate den Abbruch des Thread nur an. Dadurch kann der Thread vor seiner Beendigung noch erforderliche Aufräumarbeiten durchführen.</p>
</blockquote>
<p>Wenn jetzt in der Execute-Funktion auf Terminate geprüft und die Funktion beendet wird, warum schlägt das delete dann trotzdem fehl?</p>
<p>Terminate() setzt lediglich FTerminated und damit die Eigenschaft Terminated auf true. Die Funktion Execute fragt in der Schleife zunächst auf Terminated ab, und beendet sich. Dies geschieht jedoch zeitlich nach dem delete. Verwundert war ich auch darüber, das Execute schon aufgerufen wird, bevor überhaupt der Constructor abgearbeitet ist, wenn mit CreateSuspended = false aufgerufen wird, was ja in diesem Falle notwendig ist. Warum ist schon klar, da schon der Constructor von TThread selbiges macht.</p>
<p>Aber, worüber diskutieren wir hier eigentlich? :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/709054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/709054</guid><dc:creator><![CDATA[Manfred Schmidtke]]></dc:creator><pubDate>Fri, 28 Jan 2005 17:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Fri, 28 Jan 2005 18:04:48 GMT]]></title><description><![CDATA[<p>Das delete schlägt einzig und allein deswegen fehl, weil der Thread mit FreeOnTerminate = true erzeugt wird. Durch das 'Suspenden' verhinderst Du nur, dass der Thread weiter ausgeführt wird und sich selbst freigibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/709082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/709082</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 28 Jan 2005 18:04:48 GMT</pubDate></item><item><title><![CDATA[Reply to Thread über TTimer abschiessen on Mon, 04 Apr 2005 08:13:13 GMT]]></title><description><![CDATA[<p>Die Disukussion um HEZ' &quot;mein Thread beendet nicht&quot; wurde hier her abgetrennt:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-105907.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-105907.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/759424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/759424</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Mon, 04 Apr 2005 08:13:13 GMT</pubDate></item></channel></rss>