<?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[watchdog]]></title><description><![CDATA[<p>hallo leute</p>
<p>hab da wieder mal ne frage. gibt es in c++ eine art watchdog? ich möchte dass wenn mein progi nicht mehr reagiert, dass ich dann irgendetwas auf meinem gui oder auch nur eine tastenkombination drücken muss, damit dass programm entweder schliesst, oder das es aus seinem zustand in den ursprünglichen zurück geht...<br />
kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/48993/watchdog</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 00:57:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/48993.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Sep 2003 06:11:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to watchdog on Mon, 15 Sep 2003 06:11:25 GMT]]></title><description><![CDATA[<p>hallo leute</p>
<p>hab da wieder mal ne frage. gibt es in c++ eine art watchdog? ich möchte dass wenn mein progi nicht mehr reagiert, dass ich dann irgendetwas auf meinem gui oder auch nur eine tastenkombination drücken muss, damit dass programm entweder schliesst, oder das es aus seinem zustand in den ursprünglichen zurück geht...<br />
kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/353707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/353707</guid><dc:creator><![CDATA[marc_ch]]></dc:creator><pubDate>Mon, 15 Sep 2003 06:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Mon, 15 Sep 2003 08:17:42 GMT]]></title><description><![CDATA[<p>hm, vielleicht kannst du versuchen einen extra-thread zu erstellen, der nur darauf wartet, dass die Tastenkombination gedrpckt wird und dann das Programm beendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/353782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/353782</guid><dc:creator><![CDATA[Maxi2]]></dc:creator><pubDate>Mon, 15 Sep 2003 08:17:42 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Mon, 15 Sep 2003 08:32:42 GMT]]></title><description><![CDATA[<p>hmm, klingt nicht schlecht, aber gibt es nicht wi in c einen watchdog den man ansprechen kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/353786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/353786</guid><dc:creator><![CDATA[marc_ch]]></dc:creator><pubDate>Mon, 15 Sep 2003 08:32:42 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Mon, 15 Sep 2003 21:26:09 GMT]]></title><description><![CDATA[<p>Die musst dir wohl selber schreiben.</p>
<p>Absolutes Trivialbeispiel ( ungetestet)</p>
<pre><code class="language-cpp">Globale Variable

unsigned int Ich_lebe_noch=0;
unsigned int Exit_thread=0;

void Setze_Ich_lebe_noch(void)
{
Ich_lebe_noch=1;
}

void Setze_Exit_thread(void)
{
Exit_thread=1;
}

watdog thread

void watch (pvoid p)
{
Setze_Ich_lebe_noch();
 for(;;)
  {
  if (1==Exit_thread)
    break;
  if (0!=Ich_lebe_noch)
    {
    Ich_lebe_noch=0;
      sleep(1000);
    }
  else
   {
   // Bullsch...
   exit(-1)  // katastrophaler Fehler
   }
  }
// hier Thread verlassen
}
</code></pre>
<p>Im laufende Programm muss jetzt dafür gesorgt werden, das innerhalb von 800 mSec die Funktion Setze_Ich_lebe_noch aufgerufen wird. Dadurch das die Funktion Setze_Ich_lebe_noch in watch for der For schleife aufgerufen wird hat man erst mal 800 mSec Zeit für andere Aufgaben.</p>
<p>Die 800 mSec ist bei Sleep(1000) mit ABsicht gewählt um auch Betriebssystem Zeitjitter ziemlich unter Kontrolle zu halten. Man sollte nie den Abbruchwert und die Zeit für das setzen dicht beieinander wählen, das führt nur zu Strss.</p>
<p>P.S. Der Code oben ist nur ein Anhalt für das Verfahren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354289</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Mon, 15 Sep 2003 21:26:09 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Tue, 16 Sep 2003 19:42:53 GMT]]></title><description><![CDATA[<p>Wo gibt's in (ANSI)-C einen Watchdog? Oder hab ich was übersehen?</p>
<p>Das 800-ms-teil ist relativ gefährlich, da es unter Windows keine Garantien für Latenzzeiten gibt.</p>
<p>Eine sinnvolle Implementation müßte wenigstens einen zusätzlichen thread auf niedrigster priorität, um zu unterscheiden, ob die Anwendung hängt oder das System nur beschäftigt ist.</p>
<p>Das löst aber immer noch nicht die Frage, ob die Anwendung nur mit einer längeren berechnung beschäftigt ist, oder tatsächlich &quot;tot&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354923</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Tue, 16 Sep 2003 19:42:53 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Tue, 16 Sep 2003 20:29:12 GMT]]></title><description><![CDATA[<p>Dies ist ein Trivialbeispiel (oben angeführt) wie ich mit der WinApi (Sleep, threads) und C so etwas realisieren kann,<br />
Auch &quot;professionelle &quot; Watchdog Lösungen gehen davon aus das der laufende Process innnerhalb einer definierten Zeit die Watchdog zurücksetzt.</p>
<p>Apropos Lange Rechnung. Solche Fuinktionen müssen den Watchdog Aufruf in regelmäßigen Zeitabständen selber<br />
duchführen.</p>
<p>Definitiv falsch ist einen weiteren Thread aufzusetzen, welcher in regelmäßigen Zeitabständen den Watchdog<br />
zurücksetzt.</p>
<p>EIn Programm ist dann als tot definiert wenn es den Watchdog nicht rechtzeitig zurücksetzt.</p>
<blockquote>
<p>Die 800 mSec ist bei Sleep(1000) mit ABsicht gewählt um auch Betriebssystem Zeitjitter ziemlich unter Kontrolle zu halten. Man sollte nie den Abbruchwert und die Zeit für das setzen dicht beieinander wählen, das führt nur zu Strss.</p>
</blockquote>
<p>Mit deiner Zeitkritik hast du vielleicht recht, Vielleicht sollte man mehr als 20% Jitter zulassen.<br />
Das sollte man aber ausprobieren. Wenn ein System eine Watchdog will muß man sich eh mit dem Zeitverhalten des Systems auseinandersetzten udn kann dann eine vernünftige Relation wählen.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> WINAPI Forum :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354959</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Tue, 16 Sep 2003 20:29:12 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Tue, 16 Sep 2003 20:45:15 GMT]]></title><description><![CDATA[<p>OK, ich dachte Marc kennt einen im C standard definierten Watchdog von dem ich noch nix gehört hab <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>PAD schrieb:</p>
<blockquote>
<p>EIn Programm ist dann als tot definiert wenn es den Watchdog nicht rechtzeitig zurücksetzt.</p>
</blockquote>
<p>Ei weh...<br />
Ich denke nicht, das Jitter zwischen Watchdog und App das Problem ist.<br />
Problematisch wird's dann, wenn ein Thread mit hoher Priorität für eine Sekunde beschäftigt ist, und dann der Watchdog vor der App an die Reihe kommt. Ergebnis: Eine Anwendung, die &quot;Auf den Desktop abstürzt&quot;, wenn der Rechner mal ein bisserl rödelt. Die Prio des Watchdogs runterzusetzen hilft, glaub ich, nur unterm NT Kernel, Win9x fügt noch einen random-wert in den Scheduler ein, um bestimmte deadlocks zu lösen (kann mich aber auch irren)</p>
<p>Der Low-Priority Thread war nicht zum rücksetzen des Watchdog gedcht, eher zum abschießen: Wen der LP thread genug Rechenzeit bekommt, die zu überwachende App den Watchdog aber nicht zurücksetzt, ist wohl wirklich was faul. Eigentlich kann man den Watchdog gleich im LP thread laufen lassen - aber nicht it Sleep sondern z.B. mit (asgemessenen) NOP's. Das funktioniert vielleicht sogar wirklich...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354963</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Tue, 16 Sep 2003 20:45:15 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Tue, 16 Sep 2003 21:09:49 GMT]]></title><description><![CDATA[<p>Die Frage ist was will er ereichen. So wie er es schildert wäre auch eine 10 Sekunden Timeout und eine 100 mSec Rücksetzzeit völlig ausreichend. Sein Ziel scheint zu sein, das wenn sein Programm spinnt er nicht den Taskmanage zum Abschießen nehmen muß.</p>
<p>Ich dachte da eher an System in die Dinge in gewissen Zeiten erledigen müssen (softest realtime as possible jitter ca 300 mSec), dann dürfen solche Killerapplikation die ohne meine Planung an ihren eigenen Prioritäten drehen und sich Rechenzeit ohne Ende abgreifen eh nicht laufen. Nich mal eben Word neben einer watchdog Applikation laufen lassen.</p>
<p>Das hatte ich bei deiner Fragestellung nicht vermutet, hatte nur die Sorge das dritte auf so eine Schnapsidee kommen.</p>
<p>Watchdog mit low Priority, wohl eher das Gegenteil, im Prinzip ist der wichtiger als die Applikation. Nicht umsonst wird in kritischen Systemen der Watchdog in HW ausgeführt und geht meistens direkt auf den Reset.<br />
Schon meine gleichpriorisiere Lösung ist aus den von dir genannten Gründen (High Prio SW) in diesem Sinne gefährlich, weil sie sich um die gleiche Zeitscheibe mit der Appl streitet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354977</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Tue, 16 Sep 2003 21:09:49 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Tue, 16 Sep 2003 21:33:20 GMT]]></title><description><![CDATA[<p>stimmt... wenn die App in 'ner Endlosschleife hängt statt in einem Deadlock o.ä., dann würde mein Watchdog nicht anspringen. Hm....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/354991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/354991</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Tue, 16 Sep 2003 21:33:20 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Wed, 17 Sep 2003 05:27:02 GMT]]></title><description><![CDATA[<p>hallo leute</p>
<p>vielen dank für eure beiträge... ich möchte noch kurz erwähnen, dass ich keine feste zeit setzen kann, denn sobald ich über die comschnittstelle etwas auslese, kann das von 10 sec bis zu 2 minuten dauern...</p>
<p><strong>PAD schrieb:</strong></p>
<blockquote>
<p>Die Frage ist was will er ereichen. So wie er es schildert wäre auch eine 10 Sekunden Timeout und eine 100 mSec Rücksetzzeit völlig ausreichend. Sein Ziel scheint zu sein, das wenn sein Programm spinnt er nicht den Taskmanage zum Abschießen nehmen muß.</p>
</blockquote>
<p>genau das wäre eigentlich meine idee, es soll erst reagieren wenn 10 sec nichts passiert ist, also wenn der taskmanager meldet dass er keine rückmeldung bekommt..</p>
<p>ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/355016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/355016</guid><dc:creator><![CDATA[marc_ch]]></dc:creator><pubDate>Wed, 17 Sep 2003 05:27:02 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Thu, 18 Sep 2003 05:15:46 GMT]]></title><description><![CDATA[<p>Wenn du soetwas machen mußt, kannst du bei jedem Reset des Watchdogs diesem mitteilen wie lange er das nächste mal warten soll.</p>
<p>Aber ob dein Konzept sinnvoll ist, ich weis...</p>
<p>Erzähl mal was willst du eigentlich für ein Problem Lösen.<br />
Serielle Schnittstelle haben timeouts, man kann das Lesen in einen eigenen thread packen und das Ergebnis melden. Dann sind solche Konstrukte meistens nicht nötig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/355794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/355794</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Thu, 18 Sep 2003 05:15:46 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Thu, 18 Sep 2003 07:50:32 GMT]]></title><description><![CDATA[<p>oder mit FILE_FLAG_OVERLAPPED arbeiten <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>
]]></description><link>https://www.c-plusplus.net/forum/post/355871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/355871</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Thu, 18 Sep 2003 07:50:32 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Thu, 18 Sep 2003 09:08:28 GMT]]></title><description><![CDATA[<p>was ist FILE_FLAG_OVERLAPPED?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/355934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/355934</guid><dc:creator><![CDATA[marc_ch]]></dc:creator><pubDate>Thu, 18 Sep 2003 09:08:28 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Thu, 18 Sep 2003 10:50:38 GMT]]></title><description><![CDATA[<p>Ein Flag für CreateFile:</p>
<p>MSDN-Library zu &lt;a href= schrieb:</p>
<blockquote>
<p>CreateFile&quot;&gt;Instructs the system to initialize the object, so that operations that take a significant amount of time to process return ERROR_IO_PENDING. When the operation is finished, the specified event is set to the signaled state.<br />
When you specify FILE_FLAG_OVERLAPPED, the file read and write functions must specify an OVERLAPPED structure. That is, when FILE_FLAG_OVERLAPPED is specified, an application must perform overlapped reading and writing.</p>
<p>When FILE_FLAG_OVERLAPPED is specified, the system does not maintain the file pointer. The file position must be passed as part of the lpOverlapped parameter (pointing to an OVERLAPPED structure) to the file read and write functions.</p>
<p>This flag also enables more than one operation to be performed simultaneously with the handle (a simultaneous read and write operation, for example).</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/355992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/355992</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Thu, 18 Sep 2003 10:50:38 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Thu, 18 Sep 2003 11:04:58 GMT]]></title><description><![CDATA[<p>ok, dass habe ich auch schon gelesen...<br />
die meinung wäre wohl, dass ich beim createfile zum öffnen der schnittstelle mein flag so setze, aber ich arbeite mit einer nicht (!!!) overlapped struktur... also wird das wohl nichts, habe es schon getestet, aber dann funktioniert gar nichts mehr...<br />
muss ich wirklich einen eigenen thread machen?<br />
irgendwie klingt das ein wenig kompliziert für mich. gibt es nicht eine alternative? irgend eine message die vom system oder vom programm kommt und anzeigt dass vom programm her keine rückmeldung kommt? dann könnte ich dem programm sagen dass es den laufenden prozess beenden soll und sich selber wieder neu lädt und eine fehlermeldung ausgibt..</p>
<p>vielleicht bin ich auch nur unfähig..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/356001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/356001</guid><dc:creator><![CDATA[marc_ch]]></dc:creator><pubDate>Thu, 18 Sep 2003 11:04:58 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Thu, 18 Sep 2003 13:05:21 GMT]]></title><description><![CDATA[<p>Und warum verwendest du nicht einfach eine OVERLAPPED-Struktur <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/356105</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/356105</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Thu, 18 Sep 2003 13:05:21 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Thu, 18 Sep 2003 13:08:48 GMT]]></title><description><![CDATA[<p>weil ich meinen port exklusiv holen muss....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/356106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/356106</guid><dc:creator><![CDATA[marc_ch]]></dc:creator><pubDate>Thu, 18 Sep 2003 13:08:48 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Thu, 18 Sep 2003 13:18:30 GMT]]></title><description><![CDATA[<p>marc_ch schrieb:</p>
<blockquote>
<p>weil ich meinen port exklusiv holen muss....</p>
</blockquote>
<p>Flenders spricht von den Flags und der OVERLAPPED-Struktur, nicht vom Share-Mode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/356114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/356114</guid><dc:creator><![CDATA[-King-]]></dc:creator><pubDate>Thu, 18 Sep 2003 13:18:30 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Thu, 18 Sep 2003 13:23:43 GMT]]></title><description><![CDATA[<p>ich weiss schon dass er von flags spricht, aber die sehr wohl einen einfluss<br />
auf den share-mode. wenn die struktur overlapped ist kannst du keine ports mehr exklusiv holen.. stimmt doch oder?</p>
<p>sorry, war vielleicht ein wenig kurz...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/356126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/356126</guid><dc:creator><![CDATA[marc_ch]]></dc:creator><pubDate>Thu, 18 Sep 2003 13:23:43 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Thu, 18 Sep 2003 13:33:23 GMT]]></title><description><![CDATA[<p>marc_ch schrieb:</p>
<blockquote>
<p>stimmt doch oder?</p>
</blockquote>
<p>Nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/356132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/356132</guid><dc:creator><![CDATA[-King-]]></dc:creator><pubDate>Thu, 18 Sep 2003 13:33:23 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Mon, 22 Sep 2003 04:53:14 GMT]]></title><description><![CDATA[<p>Threads hören sich kompliziert sind es aber nicht.</p>
<p>Im Hauptprogramm schreibt man _beginthread(....),<br />
und anstelle von return schreibst du einfach _endthread();<br />
Das ist alles was du für deine Fall brauchst.</p>
<pre><code class="language-cpp">#define ON 1
#define OFF 0

volatile int GlobalWatchDog=ON;
volatile int GlobalEndThread=OFF;

 void TrivialWatchDog( PVOID VOID);

int main()
{
.....
  // Sobald sie Watchdogüberwachung beginnen soll
  GlobalWatchDog++;
  _beginthread( TrivialWatchDog, 0, 0 );
.....
  // in Regelmäßigen Abständen im Hautpprogramm dann ein (alle 600 mSec)
 GlobalWatchDog++;
.......
  // Sobald die WatchdogÜberwachung enden soll
  GlobalEndThread=ON;
...
return 0;
}

Die Threadfunktion sieht dann wie folgt aus.

void TrivialWatchDog( PVOID VOID)
{
int i;
if(OFF!=GlobalWatchDog)  // Programm lebt noch
 {
  GlobalWatchDog=OFF;
  for (i=0;i&lt;20;i++)  
  {
   if (ON==GlobalEndThread)
   _endthread();
   Sleep(50);
  }
 }
 else  // Programm hat sich nicht gerührt
 {
 exit(-1);  // Als Beispiel ein harter Abbruch.
 }
    /* _endthread given to terminate */
_endthread();
}
</code></pre>
<p>- Für die C++ Profis man kann das auch in eine eigene Klasse packen.<br />
- Ich weis, der direkte Zugriff auf Globale ist nicht im Sinne der reinen Leere<br />
- Ich weis, man sollte Globale Minimieren.<br />
- Ich weis, Accessfunktionen für die Variablen sind sicherer.<br />
- Die Timeoutzeit sollte man auch variable gestalten<br />
Aber dann wäre es dreimal so lang geworden und nicht so übersichtlich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/357424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/357424</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Mon, 22 Sep 2003 04:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Sun, 21 Sep 2003 11:58:51 GMT]]></title><description><![CDATA[<p>Die globalen Variablen sollten als volatile gekennzeichnet werden. Außerdem würde ich auf _endthread verzichten und den Thread durch ein einfaches return beenden wollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/357581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/357581</guid><dc:creator><![CDATA[-King-]]></dc:creator><pubDate>Sun, 21 Sep 2003 11:58:51 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Mon, 22 Sep 2003 04:55:47 GMT]]></title><description><![CDATA[<p>Das mit dem volatile habe ich sinnvollerweise korrigiert.</p>
<p>Aber warum _endthread durch return erstzen??</p>
<p>ich fände es schon schön wenn die threadfunkrionen sich überhaupt nicht von<br />
einfachen C-Funktionen unterscheiden, aber in den Büchern wird immer auf<br />
_endthread hingewiesen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/357917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/357917</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Mon, 22 Sep 2003 04:55:47 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Mon, 22 Sep 2003 11:32:04 GMT]]></title><description><![CDATA[<p>PAD schrieb:</p>
<blockquote>
<p>Aber warum _endthread durch return erstzen??</p>
</blockquote>
<p>Das _endthread würgt den Thread sofort und auf der Stelle ab. In Deinem Beispiel ist das auch kein Problem. Wenn nun aber Klassen dazukommen, werden <strong>keine</strong> Destruktoren aufgerufen. Und das finde ich bedenklich.</p>
<p>Wenn Du den Thread einfach auslaufen lässt, funktioniert das wieder. Intern wird dann sowieso _endthread aufgerufen. Ein direkter Aufruf ist überflüssig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/358114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/358114</guid><dc:creator><![CDATA[-King-]]></dc:creator><pubDate>Mon, 22 Sep 2003 11:32:04 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Mon, 22 Sep 2003 12:12:07 GMT]]></title><description><![CDATA[<p>Danke für die Information, ist Gott sei Dank in meinem Sinne.</p>
<p>D.h. für die C-Fraktion ist es unerheblich ob sie return oder _endthread nimmt, für die C++ Fraktion ist es entscheidend das sie mit return arbeitet.</p>
<p>Da _endthread nicht mehr Leistung als return bietet, sollte man return in beiden Fraktionen nutzen</p>
<p>Sehe ich das richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/358133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/358133</guid><dc:creator><![CDATA[PAD]]></dc:creator><pubDate>Mon, 22 Sep 2003 12:12:07 GMT</pubDate></item><item><title><![CDATA[Reply to watchdog on Mon, 22 Sep 2003 12:27:39 GMT]]></title><description><![CDATA[<p>PAD schrieb:</p>
<blockquote>
<p>Sehe ich das richtig?</p>
</blockquote>
<p>Ja. Man kann sich aber auch in C ganz schnell 'ne Falle bauen:</p>
<pre><code class="language-cpp">void DoSomething(void* pv)
{
    _endthread();
}

void ThreadProc(void* pv)
{
    void* pVoid = malloc(128);
    DoSomething(pVoid);
    free(pVoid);  // hier kommst Du nie an

  return;
}
</code></pre>
<p>Also immer schön auf _endthread verzichten. Dann kann auch nichts passieren. <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/358145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/358145</guid><dc:creator><![CDATA[-King-]]></dc:creator><pubDate>Mon, 22 Sep 2003 12:27:39 GMT</pubDate></item></channel></rss>