LP_THREAD_START_ROUTINE und gebundene Methoden
-
Guten Abend,
ich grüble grad an dem Problem eine gebundene Klassenmethode an CreateThread zu übergeben. Ich weiß das es mit static gehen würde, aber die Methode soll auf nicht static-Variablen zuzugreifen.//Im Konstruktor hInputThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)DoInput, NULL, CREATE_SUSPENDED, NULL);
class DLL CEngine { //... DWORD DoInput(LPVOID); //... };
Danke.
[edit]Copy&Paste-Fehler bei Parameter vorgenommen[/edit]
-
Das geht nicht. Du kannst eine statische Methode als Threadfunktion nehmen, der einen Pointer auf eine Instanz Deiner Klasse als Parameter mitgeben, über diesen kannst Du dann auf nicht-statische Objektvariablen zugreifen.
-
Danke für die Antwort.
Das mit dem Pointer ist ne Super Idee. Werd's gleich mal umschreiben.
-
Lass den Cast nach LPTHREAD_START_ROUTINE weg! Falls der Kompiler deswegen ein Problem meldet, dann HAST du ein Problem - bring ihn nicht mit einem Cast zum schweigen. Als Tip: Halte dich EXAKT an die vorgegebene Signatur.
-
Der Cast war nicht das Problem, sondern die gebundene Methode. Meine Signatur stimmt genau.
-
Jonas OSDever schrieb:
Der Cast war nicht das Problem, sondern die gebundene Methode. Meine Signatur stimmt genau.
Ja, klar, der Cast und deine initiale Fragen haben nichts miteinander zu tun. Dennoch, der Cast ist falsch und falls sich der Kompiler ohne Cast beschwert ist die Signatur noch nicht korrekt.
Vielleicht fehlt ja die Calling Convention?
-
Oh, stimmt, ich hab WINAPI vergessen. Sorry. Hat aber trotzdem funktioniert. Egal, danke für den Hinweis.
-
Hat aber trotzdem funktioniert.
Es ist gefährlich anzunehmen, dass es funktioniert nur weil Du noch kein Problem festgestellt hast.