tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
707
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    unmatrix unmatrix ist offline Grünschnabel
    Registriert seit
    Oct 2005
    Beiträge
    2
    Hallo,

    ich hab ein kleines Problem beim aufrufen von '_beginthread'.
    Folgender code zum aufrufen :

    Code :
    1
    
    _beginthread(multitaskingfunc,0,NULL);

    ich würde gerne die Funktion als member Funktion deklarieren, allerdings bekomm ich dann immer einen Fehler : 'Konvertierung des Parameters 1 von 'void (void *)' in 'void (__cdecl *)(void *)' nicht möglich'

    Funktion :
    Code :
    1
    2
    
    public:
    void multitaskingfunc(void *test);


    wenn ich allerdings die Funktion 'multitaskingfunc' als globale Funktion (also einfach wo in meine cpp-Datei) schreib, funktioniert es auf dem ersten Blick so wie es soll.
    Allerdings wenn ich zb eine Ausgabe per MessageBox machen will :
    Code :
    1
    2
    
    HWND hWnd;
    MessageBox(hWnd,"text","text..",MB_OK);
    , oder ähnliches, bekomm ich jedesmal ein Prgrammfehler (was von wegen hWnd ungültig)...

    Was mach ich falsch ?
     

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Wenn du eine Klassenmethode als Threadfunktion verwenden willst, musst du sie als "static" deklarieren:
    Code :
    1
    2
    
    public:
    static void multitaskingfunc(void *test);

    Bei deiner Messageboxausgabe muss du natürlich der Variable "hWnd" erst einen gültigen Fensterhandle zuweisen, bevor du sie an die Messagebox-Funktion übergibst.
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Für solche Geschichten ist dann der void*-Parameter gedacht. Da kannst du ein Struct oder einen Wert übergeben.

    Ich habe mir für meine Code-Bibliothek eine Thread-Basis-Klasse erstellt, die dann der statischen Memberfunktion einen Zeiger auf sich selbst übergibt. Der Zeiger wird zurückgecastet und ruft die (virtuelle) Thread-Funktion der Klasse auf. Abgeleitete Klassen müssen nur noch diese Member-Funktion überladen.
     

  4. #4
    unmatrix unmatrix ist offline Grünschnabel
    Registriert seit
    Oct 2005
    Beiträge
    2
    danke, danke
    dass mit den static hat geklappt

    und hWnd brauch ich dann ja jetzt auch ned mehr

    thx euch beiden
     

Ähnliche Themen

  1. Problem mit _beginthread
    Von colt4ever im Forum C/C++
    Antworten: 11
    Letzter Beitrag: 31.03.10, 08:17
  2. Allegro kennt _beginthread nicht
    Von Windhund im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 13.05.09, 22:01
  3. wie _beginthread, socket abschießen ?
    Von cyberds19 im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 31.07.08, 17:25
  4. C++: void oder int?
    Von Acriss im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 23.07.07, 10:51
  5. problem mit _beginthread funktion
    Von Nasenbrecher im Forum VisualStudio & MFC
    Antworten: 4
    Letzter Beitrag: 03.11.05, 19:55