CreateThread-Problem



  • Hallo,

    Ich habe folgende Thread-Problem. Ich möchte aus einer DLL heraus einen oder mehrere Threads starten. Also rufe ich CreateThread von DllMain aus auf. Wenn ich mir den Process im Taskmanager anschaue sehe ich, das ein Thread erzeugt wird, aber die Befehle der ThreadProc werden nicht abgearbeitet. Der gleiche Code funktioniert wenn ich damit eine Exe erzeuge(CreateThread dann in WinMain). Weiss jemand warum
    das mit dem Thread bei der DLL nicht klappen will?



  • mhh weiss denn wirklich niemand eine Antwort? Weiss langsam nicht mehr weiter 😞



  • ich denke mal, dass wenn die dll-main verlassen wird auch der thread wieder zerstört wird.



  • Nein ich glaube nicht. Nachdem ich in DLLMain den Thread gestartet habe rufe ich noch andere Funktionen auf und im Taskmanager sehe ich unter Threads auch den zusätzlichen Thread. Ich hab mich inzwischen soweit in der MSDN eingelesen, das ich weiss, Threads sollen nicht unter DLLMain gestartet werden, weil das nur für die Initialisierung da ist. Ein Thread der unter DLLMain gestartet wird, soll offenbar erst dann anlaufen, wenn die Initialisierung der DLL beendet ist. Aber wie mache ich das? Ich hab jetzt schon versucht von DLLMain aus zuerst eine andere Funktion aufzurufen und von dort aus CreateThread aufzurufen, aber das Ergebnis ist das selbe. Der Thread läuft nicht an. Weiss jemand eine Lösung?



  • Was sind denn das für "Befehle" in der ThreadProc?
    Was sagt der Debugger?



  • Ich poste hier jetzt mal die Code-Schnipsel, das sollte das ganze sicherlich erleichtern:

    BOOL APIENTRY DllMain( HANDLE hModule, 
                           DWORD  ul_reason_for_call, 
                           LPVOID lpReserved
    					 )
    {
    	if(ul_reason_for_call == DLL_PROCESS_ATTACH)
    	{
    		DWORD dwFlags;
    		hThreadHandle = CreateThread( NULL, NULL, (LPTHREAD_START_ROUTINE) Log, NULL, dwFlags, NULL );
                     Steuerung();
    	}
    	else
    	{
    		ExitProcess(0);
    		return FALSE;
    	}
    	return TRUE;
    }
    

    Und hier ist jetzt der Beginn der ThreadProc:

    UINT Log(LPVOID pParam)
    {
    	MessageBox(NULL, "Thread gestartet" ,"Info", MB_ICONSTOP | MB_OK);
    

    Die Messagebox habe ich noch nie zu sehen bekommen, der Rest der DLL(also die Procedure Steuerung()) läuft wie geplant. Die DLL im Debugger zu debuggen ist ja direkt nicht möglich, deshalb wollte ich mal mit der MessageBox testen ob die ThreadProc überhaupt erreicht wird. Wenn ich den gleichen Code in einer Exe benutze (also CreateThread dann unter WinMain) funktioniert er ohne Probleme.



  • Weiss echt langsam nicht mehr weiter. Hab alles probiert, es klappt nicht mit dem Thread. Hat denn wirklich niemand eine Ahnung wie ich einen Thread in einer Dll starte?


Log in to reply