worker thread worked nicht



  • Hallo,
    ich weiß echt nicht was ich im folgendem Bsp. falsch mache:

    //Funktion, welche code für thread enthält
    UINT RecvThreadProc( LPVOID pParam );
    //thread starten
    AfxBeginThread( RecvThreadProc, GetSafeHwnd() );
    

    Der Compiler gibt folgende Fehlermeldung:

    Durch keine der 2 Überladungen kann Parameter 1 vom Typ unsigned int (void*)konvertiert werden

    Die Funktion, muss als UINT deklariert werden, warum schimpft der Compiler????
    Ich benutze Visual Studio 6.0 .

    Bin für jeden Hinweis dankbar!



  • Hast du die Meldung jetzt frei abgeschrieben oder aus dem Meldungsfenster rauskopiert? Mir würde jetzt nur auffallen, daß GetSafeHwnd() keinen Zeiger zurückgibt, sondern ein Handle.



  • Tach,

    also Parameter 2 ist schon in ordnung, er meckert ja beim ersten Parameter.
    GetSafeHwnd() als 2. Param ist beabsichtigt. Dieser muss in der Arbeitsfunktion entsprechend konvertiert werden.



  • Daniellus schrieb:

    also Parameter 2 ist schon in ordnung, er meckert ja beim ersten Parameter.

    Beim ersten Parameter von welcher Funktion? (und nochmal: zeig bitte die korrekte und vollständige Fehlermeldung - inklusive der Angabe, welche Zeile das betrifft)



  • Vollständige Fehlermeldung:

    E:\CalibToolDlg.cpp(1464) :error C2665: 'AfxBeginThread' : Durch keine der 2 Ueberladungen kann Parameter 1 vom Typ 'unsigned int (void *)' konvertiert werden
    Fehler beim Ausführen von cl.exe.



  • Mach mal aus deinem RecvProc eine CALLBACK Funktion, wenn du das bis jetzt noch nicht gemacht hast.

    Also:

    UINT CALLBACK RecvThreadProc( LPVOID pParam );
    


  • CALLBACK bringt leider nichts...gleiche Fehlermeldung.



  • Wenn du ohnehin nur einen Worker Thread (also nicht mit RUNTIME_CLASS) brauchst, dann nimm doch einfach _beginthreadex.

    Irgendjemand hier im Forum meinte auch, dass das besser sei als CreateThread. CreateThread wird von AfxBeginThread verwendet.

    Sonst würde mir eine Lösung zu deinem Problem nicht einfallen, weil die Parameter, die du übergibst, vollkommen richtig sind.



  • Also meine Doku deklariert AfxBeginThread wie folgt:

    AfxBeginThread
    CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );

    CWinThread* AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );

    meiner Meinung nach fehlt "LPVOID pParam"

    Gruss Frank



  • Nein leider ist es nicht das Problem. Der zweite Parameter ist vorhanden, nämlich der Rückgabewert von GetSafeHwnd().



  • da ich gerade selbst das problem hatte aber nicht dran gedacht hatte. ich bekam die selbe fehlermeldung, die Funktion muss statisch sein.

    static UINT Thread(LPVOID pParam)


Anmelden zum Antworten