Konvertieren von 'DWORD (__cdecl *)(void *)' in 'LPTHREAD_START_ROUTINE' möglich



  • hab eine "static DWORD Funktion(void *)" und möchte die an CreateThread übergeben wie caste ich die richtig?



  • Warum willst du dich nicht an die Standard Aufrufkonventionen halten?
    ->

    DWORD WINAPI ThreadProc( LPVOID lpParameter );



  • Würde ich ja gerne. Aber wie übergebe ich diese soeine Funktion (DWORD WINAPI) an eine andere?

    Ich hab eine Threadmanager Classe und an die muß ich ja die Thread Funktion übergeben.

    Wenn ich das so mache:

    void CMyThreadManager::newThread(LPTHREAD_START_ROUTINE  ThreadProc(void *), void * arg)
    {
     //...
     	m_handle.push_back(CreateThread(NULL, 0, ThreadProc, arg, 0, &dwThreadID));
     // ...
    }
    

    bekomme ich folgenen Compiler Error:
    'CMyThreadManager::newThread' : Konvertierung des Parameters 1 von 'DWORD (void *)' in 'LPTHREAD_START_ROUTINE (__cdecl *)(void *)' nicht möglich



  • Habs mal so versucht:

    void CMyThreadManager::newThread(DWORD WINAPI proc(void*), void * arg) 
    { 
     //... 
         m_handle.push_back(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)(proc), arg, 0, &dwThreadID)); 
     // ... 
    }
    

    Da sagt er mir, wenn ich an newThread eine FUnktion übergebe:

    Konvertierung des Parameters 1 von 'DWORD (void *)' in 'DWORD (__stdcall *)(void *)' nicht möglich

    Aber wie so sagt er denn das meine Threadfunktion "DWORD WINAPI MyThread(void *p);" nur "DWORD (void *)" ist. Hab die also WINAPI deklariert! Hat der das Weg optimiert?



  • Ich habe genau den selben Fehler.
    Vorher lief alles als einfache c-datei. jetzt habe ich die funktionen in ein mfc-projekt übertragen, da hat sich das mit dem laufen erledigt.

    in der msdn-hilfe wurde empfohlen

    #define WINAPI __stdcall
    

    an den Anfang zu setzen. geht trotzdem nicht.

    vielleicht sollte ich alle createthread-befehle durch AfxBeginThread ersetzen.
    was ist der unterschied?

    das steht dazu in der msdn:

    Use AfxBeginThread to create a thread object and execute it in one step. Use CreateThread if you want to reuse the thread object between successive creation and termination of thread executions.

    nix kapiert. einen mit afxbeginthread gestarteten thread kann ich doch auch anhalten und mehrmals verwenden???


Anmelden zum Antworten