Keine Threads in DLLs?
-
Beachte bitte, dass Du in DllMain keinen Thread starten kannst!
-
Erstmal vielen Dank für die Antworten.
Aus der DLLMain ruf ich eine Funktion auf,diese ruft wiederrum eine Funktion auf
welche dann den Thread startet:CreateThread (NULL, 0, telnet_connect,&dwThreadParam, 0,&telnetthread); //... DWORD WINAPI telnet_connect( LPVOID pvoid ) { //... }
@Martin Richter: Aber aus Unterfunktionen schon,oder?
Schon mal Danke,
Xalon
-
Nein, aus Unterfunktionen auch nicht!?!
(wie kann man nur denken es würde nen Unterschied machen *wunder*)
-
@hustbaer: Außer er meint aus einer separaten Funktion die man in der DLL aufruft.
Aber dann hat er sich reichlich komisch ausgedrückt...
-
Ähm ich meinte wenn ich aus der DLL eine Funktion aufrufe,ob die dann einen Thread
starten kann. Scheinbar ja nicht.Gibt es irgendeine Lösung für das Problem?
Schon mal Danke,
Xalon
-
Wenn diese Funktion nicht im Kontext von einer DllMain Funktion erfolgt dann ist das möglich.
-
@Xalon_:
Du kannst deinen Thread auch in DllMain starten, bloss nicht mit den meisten Frameworks, ganz einfach deswegen weil du nicht darauf warten kannst dass der Thread wirklich losläuft (das tut er nicht solange DllMain nicht fertig abgearbeitet ist), und die meisten Frameworks warten aus dem einen oder anderen Grund darauf dass der Thread losgelaufen ist.Ansonsten, solltest du wirklich eine Unterfunktion meinen die NICHT von DllMain aus aufgerufen wird sondern NACHDEM DllMain fertig ist, dann sollte es garkeine Probleme geben und die Ursache für den Fehler liegt irgendwo anders.
-
Ok Danke habt mir sehr geholfen
-
Martin Richter schrieb:
Beachte bitte, dass Du in DllMain keinen Thread starten kannst!
Warum geht das nicht ?
-
*push* ?!
-
Mich würde es wirklcih auch interessieren warum man das nicht machen darf ... wenn ich in einer WinMain/main einen Thread starten darf, warum dann nicht auch in einer DllMain?
-
Du kannst in der DllMain beliebig viele Threads starten :
http://msdn2.microsoft.com/en-us/library/ms682453.aspxCreateThread () schrieb:
During process startup and DLL initialization routines, new threads can be created, but they do not begin execution until DLL initialization is done for the process.