_beginthread und void*

unmatrix

Grünschnabel
Hallo,

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

Code:
_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:
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:
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 ?
 
Wenn du eine Klassenmethode als Threadfunktion verwenden willst, musst du sie als "static" deklarieren:
Code:
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.
 
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.
 

Neue Beiträge

Zurück