Problem: Memory Leaks mit CWinThread ???
-
EOP schrieb:
AfxEndThread solltest du NIE benutzen!
Stattdessen sooltest du eine message an den thread schicken, daß er sich beenden soll.
Dieser reagiert dann mit ::PostQuitMessage(0); und sendet danach in ExitInstance eine message and den main thread, daß er sich beendet hat.1. AfxEndThread darf man benutzen. Es terminiert den aktuelen Thread.
Besser ist jedoch einfach die Thread Funktion mit einem return zu verlassen-
2. Warum soll man an einen Thread eine Nachricht senden, meistens haben die keine Message-Loop. Ein simples Flag tut es doch auch.
-
Sry, ich bin da beim Einsetzten von Klassen auch nicht so firm:
Soll ich von außen den Thread anhalten und ExitInstance (mit enthaltenem AfxEndThread()) aufrufen?
Ich kann mir alles gut vorstellen wenn ich nur eine Funktione benutze, aber so komm ich durcheinander.

Wenn ich also innerhalb meines Thread-Obejktes AfxEndThread aufrufe, dann leite ich die Terminierung dieses Objektes ein, richtig?
Es kommt aber nie zum Aufruf von ExitInstance und obwohl das VS2008 die Threads nicht mehr sieht bleiben doch die Speicherleaks übrig.
-
Martin Richter schrieb:
EOP schrieb:
AfxEndThread solltest du NIE benutzen!
Stattdessen sooltest du eine message an den thread schicken, daß er sich beenden soll.
Dieser reagiert dann mit ::PostQuitMessage(0); und sendet danach in ExitInstance eine message and den main thread, daß er sich beendet hat.1. AfxEndThread darf man benutzen. Es terminiert den aktuelen Thread.
Besser ist jedoch einfach die Thread Funktion mit einem return zu verlassen-
2. Warum soll man an einen Thread eine Nachricht senden, meistens haben die keine Message-Loop. Ein simples Flag tut es doch auch.AfxEndThread:
http://www.google.com/search?name=f&hl=en&q=AfxEndThread+&sourceid=mozilla-search&start=0Never use AfxEndThread! [Archive] - CodeGuru Forums
It is strongly recommended to avoid using AfxEndThread() function ... Hence AfxEndThread() call is not safe in terms of memory leaks when ...
-> visualcpp.net
-The only thing to understand about AfxEndThread is that you should never, ever use it. End
of what you need to know.- Joseph M. Newcomer
usw.
Wenn er CWinThread ableitet, ist das denn nicht automatisch ein UI Thread mit message loop?
-
1. AfxEndThread darf man aufrufen. Sicher muss man wissen was man tut. Dass z.B. auch Objekte des aktuellen Stacks nicht vernichtet werden, ist auch logo.
Wie ich aber schrieb: Am besten einfach return aus der Thread Funktion.
2. Wenn er von CWinThread ableitet, kann er alles in InitInstance machen und FALSE zurückgeben. Solange er nicht in InitInstance TRUE zurückgibt UND Run nicht überschreibt wird auch keine Message-Loop angelaufen...
-
Martin Richter schrieb:
2. Wenn er von CWinThread ableitet, kann er alles in InitInstance machen und FALSE zurückgeben. Solange er nicht in InitInstance TRUE zurückgibt UND Run nicht überschreibt wird auch keine Message-Loop angelaufen...
Danke, das wusste ich so nicht.
-
Nichtsdestotrotz:
The only thing to understand about AfxEndThread is that you should never, ever use it. End of what you need to know.
- Joseph M. Newcomer (= Guru)
-
EOP schrieb:
Nichtsdestotrotz:
The only thing to understand about AfxEndThread is that you should never, ever use it. End of what you need to know.
- Joseph M. Newcomer (= Guru)
OK! Wenn Du Joseph auffährst gebe ich mich geschlagen...

-
Martin Richter schrieb:
EOP schrieb:
Nichtsdestotrotz:
The only thing to understand about AfxEndThread is that you should never, ever use it. End of what you need to know.
- Joseph M. Newcomer (= Guru)
OK! Wenn Du Joseph auffährst gebe ich mich geschlagen...

LOL, wusste ich doch wie ich dich krieg.

Ist aber wirklich ein Zitat von Joseph:
http://www.databaseforum.info/2/25/d7abeb3a9f645d61.html
http://www.tech-archive.net/Archive/VC/microsoft.public.vc.mfc/2005-01/0977.html
-
EOP schrieb:
Ist aber wirklich ein Zitat von Joseph:
http://www.databaseforum.info/2/25/d7abeb3a9f645d61.html
http://www.tech-archive.net/Archive/VC/microsoft.public.vc.mfc/2005-01/0977.htmlIch weiß. Und ich gebe Dir recht.
Es ist alles gesagt:
1. Am Besten die Funktion mit einem return verlassen...
2. Am Besten die Existenz von AfxEndThread vergessen!PS: Ich kenne Joseph persönlich als ich ihn vor Jahren in Redmond getroffen habe. Einmal hatte ich mit ihm eine längere Diskussion gehabt, ich habe daraus gelernt nie wieder mit ihm zu diskutieren
(obwohl er nicht recht hatte SCNR).
-
Martin Richter schrieb:
PS: Ich kenne Joseph persönlich als ich ihn vor Jahren in Redmond getroffen habe.
Ja, das hast du schon mal erwähnt.
Martin Richter schrieb:
Einmal hatte ich mit ihm eine längere Diskussion gehabt, ich habe daraus gelernt nie wieder mit ihm zu diskutieren
(obwohl er nicht recht hatte SCNR).LMFAO - ja solche Leute gibt es.
