<?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 Exit Handler ohne DLL?]]></title><description><![CDATA[<p>Gibt es eine Möglichkeit Thread Exit Handler (bzw. auch Thread Start Handler) zu verwenden ohne eine DLL deren DllMain man dafür verwendet?</p>
<p>Konkret geht es um einige init bzw. cleanup Funktionen die in einer Lib gebraucht werden, und die eben pro Thread ausgeführt werden müssen. Und diese Lib sollte eben wenn möglich auch rein statisch linkbar sein -- also ohne irgendeine eigene DLL auskommen. Die Verwendung von standard System DLLs wäre natürlich kein Problem.</p>
<p>Ich vermute zwar dass es nicht geht, aber da hier ein paar Leute sind die von WinAPI doch mehr Ahnung haben als ich dachte ich mir ich frage mal nach <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/topic/174348/thread-exit-handler-ohne-dll</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Jul 2026 19:24:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174348.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 25 Feb 2007 19:20:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread Exit Handler ohne DLL? on Sun, 25 Feb 2007 19:20:40 GMT]]></title><description><![CDATA[<p>Gibt es eine Möglichkeit Thread Exit Handler (bzw. auch Thread Start Handler) zu verwenden ohne eine DLL deren DllMain man dafür verwendet?</p>
<p>Konkret geht es um einige init bzw. cleanup Funktionen die in einer Lib gebraucht werden, und die eben pro Thread ausgeführt werden müssen. Und diese Lib sollte eben wenn möglich auch rein statisch linkbar sein -- also ohne irgendeine eigene DLL auskommen. Die Verwendung von standard System DLLs wäre natürlich kein Problem.</p>
<p>Ich vermute zwar dass es nicht geht, aber da hier ein paar Leute sind die von WinAPI doch mehr Ahnung haben als ich dachte ich mir ich frage mal nach <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/1235421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235421</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 25 Feb 2007 19:20:40 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Exit Handler ohne DLL? on Sun, 25 Feb 2007 19:25:18 GMT]]></title><description><![CDATA[<p>Da hilft Dir nicht mal eine DLL... das Thread-Detach wird bei einer DLL *nur* aufgerufen, wenn der Thread korrekt beendet wird.<br />
Es wird also weder bei ExitProcess/TerminateProcess noch bei TerminateThread oder einer Exception im Thread aufgerufen.<br />
IMHO gibt es nur diese unzuverlässige Methode mit DllMain...<br />
Das zuverlässigste ist immer noch eine Funktion zur Verfügung zu stellen, welche der &quot;Anwender&quot; vor dem Ende aufrufen muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235425</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Sun, 25 Feb 2007 19:25:18 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Exit Handler ohne DLL? on Sun, 25 Feb 2007 21:10:06 GMT]]></title><description><![CDATA[<p>Naja... TerminateThread, ExitProcess etc. - das ist mir eigentlich alles egal, das sind IMHO sowieso Extremfälle. Von daher wäre die DllMain Methode schon ok.</p>
<p>Und eine cleanup Funktion möchte ich unter allen Umständen vermeiden. Stell dir mal vor jmd. will z.B. eine logging Library schreiben, und diese wiederum verwendet ne thread-local-data Klasse aus einer Threading Library welche den Aufruf einer Cleanup Funktion verlangt. Das ist nicht schön, dann muss jeder der irgendwo ein Log ausgeben will die Cleanup Funktion verwenden. Noch schlimmer wirds sobald man irgendwo Callbacks hat -- wenn ich in dem Callback drinnen dann diese Logging Library verwenden möchte... ich habe ja dann oft keine Kontrolle darüber wie der Thread beendet wird.</p>
<p>IMHO ist das eine Sache die die Runtime zur Verfügung stellen sollte, so wie es ja auch onexit() gibt. Bloss eben leider kein onthreadexit() <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>Und da es die Runtime (MSVC) leider nicht kann ... werde ich wohl eben auf die &quot;DllMain Lösung&quot; zurückgreifen müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235495</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 25 Feb 2007 21:10:06 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Exit Handler ohne DLL? on Mon, 26 Feb 2007 08:36:58 GMT]]></title><description><![CDATA[<p>Auf API Level kenne ich dazu nichts. Die Thread Implementierung der MFC sieht Thread-Local-Storage vor, der auch korrekt bei Ende eines Threads freigegeben wird. Das können auch komplexere Objekte sein.</p>
<p>Was spricht dagegen, eine komplette eigene C++ Wrapper Klasse zu bauen, die genau das für Dich organsisiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235593</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 26 Feb 2007 08:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Exit Handler ohne DLL? on Mon, 26 Feb 2007 17:07:12 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Auf API Level kenne ich dazu nichts. Die Thread Implementierung der MFC sieht Thread-Local-Storage vor, der auch korrekt bei Ende eines Threads freigegeben wird. Das können auch komplexere Objekte sein.</p>
<p>Was spricht dagegen, eine komplette eigene C++ Wrapper Klasse zu bauen, die genau das für Dich organsisiert?</p>
</blockquote>
<p>Nix spricht dagegen. Genau das will ich ja machen. Bloss wie mache ich das ohne &quot;at_thread_exit()&quot; oder DllMain? Also WIE soll ich das implementieren? Stehe da leicht an... <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>Ich werd' aber auf jeden Fall mal in die MFC reingucken, bloss glaube ich dass die den gleichen Kompromiss eingeht wie alle anderen TLS Implementierungen die ich bis jetzt kenne, nämlich vom User zu verlangen dass er vor Ende des Threads seine TLS Objekte selbst wegputzt. Was IMHO unvertretbar ist.</p>
<p>EDIT: BTW: falls du das so meintest... eine eigene &quot;Thread&quot; Klasse zu bauen ist eine &quot;Lösung&quot; die sich für mich auch verbietet - wenn dann muss das mit detached Threads bzw. einfach Threads die NICHT von meiner Lib gestartet wurden genauso laufen. Warum siehe weiter oben: das soll z.B. auch in Callback Funktionen einsetzbar sein die von Threads aufgerufen werden die ausserhalb meiner Kontrolle entstanden sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1235896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1235896</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 26 Feb 2007 17:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Exit Handler ohne DLL? on Tue, 27 Feb 2007 17:47:48 GMT]]></title><description><![CDATA[<p>Das freigeben von MFC/CRT Ressourcen, welche in einer externen DLL allokiert wurden, geschieht *nur* über den DllMain Mechanismus...</p>
<p>Aus diesem Grunde gibt es auch meinen schönen KB-Artikel:<br />
Do not call &quot;DisableThreadLibraryCalls&quot; in a DLL which is statically linked to the CRT<br />
<a href="http://support.microsoft.com/kb/555563/en-us" rel="nofollow">http://support.microsoft.com/kb/555563/en-us</a></p>
<p>Weclhes das Problem schildert und auch etwas erklärt...</p>
<p>Fazit: Es wird nichts um das DllMain drum rum kommen, wenn Du nicht kontrolle über das Erzeugen des threads hast!</p>
<p>Wenn Du natürlich das Thread-Erzeugen kontrollieren kannst, dann kannst Du ja Deine eigene ThreadMain angeben und hast das &quot;Ende&quot; unter Kontrolle. Aber Dir ging es ja gerade um &quot;fremde&quot; Threads, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1236327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1236327</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Tue, 27 Feb 2007 17:47:48 GMT</pubDate></item></channel></rss>