CreateThread Funktion in anderer Klasse definiert!?



  • Hallo liebes Forum,

    ich habe ein kleine Problem bei der Modularisierung meines Programms.

    Ich möchte gerne folgende Zeile zum laufen bringen:

    CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)(functions::MessageLoopThreadNEU), NULL, 0, &dwThreadID );
    

    Also einen Thread starten mit einer Funktion die in einer anderen Klasse implementiert ist.

    Habe ich die Funktion MessageLoopThreadNEU in der gleichen Klasse funktioniert es:

    CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)MessageLoopThreadNEU), NULL, 0, &dwThreadID );
    

    Der Fehler ist folgender:

    test.cpp(1099) : error C2440: 'type cast' : cannot convert from 'void (__stdcall functions::* )(LPVOID)' to 'LPTHREAD_START_ROUTINE'
    

    Die Header Datei habe ich angepasst und die Funktion ist auch in der Zielklasse bekannt.

    Hat jemand vielleicht eine Idee, warum es nicht funktioniert?

    Gruß & Danke

    Keks


  • Mod



  • #include <windows.h>
    
    class MyClass
    {
    public:
    	void Start();
    	void Wait();
    	void __stdcall ThreadProc();
    	HANDLE m_hThread;
    };
    
    int main()
    {
    	MyClass c;
    	c.Start();
    	c.Wait();
    	return 0;
    }
    
    LPTHREAD_START_ROUTINE __declspec(naked) xyz(...)
    {
    	__asm mov eax,[esp+4]
    	__asm ret
    }
    
    void MyClass::ThreadProc()
    {
    	MessageBox(0, TEXT("running..."),0,0);
    }
    
    void MyClass::Start()
    {
    	DWORD dwThreadID;
    	m_hThread = CreateThread(NULL, 0, xyz(&MyClass::ThreadProc), this, 0, &dwThreadID );
    }
    
    void MyClass::Wait()
    {
    	WaitForSingleObject(m_hThread, INFINITE);
    	CloseHandle(m_hThread);
    }
    

Anmelden zum Antworten