Problem bei Threaderstellung
-
Hallo zusammen,
ich habe versucht einen Thread zu erstellen:void CVIView::OnBnClickedStartstop() { // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein. hThread = CreateThread( 0, 0, ThreadFunc, 0, 0, dwThreadID ); } DWORD WINAPI CVIView::ThreadFunc(LPVOID data) { for(int i=0;i<10;i++) { TRACE("bla"); Sleep(1000); } return(0); }Ich erhalte aber die Fehlermeldung:
error C2664: 'CreateThread': Konvertierung des Parameters 3 von 'DWORD (LPVOID)' in 'LPTHREAD_START_ROUTINE' nicht möglichIch hab bei google nichts wirklich brauchbares gefunden. Die MSDN hat mich auf die Funktion ThreadProc verwiesen, allerdings hat das für mich keinen Sinn ergeben

Wäre total nett, wenn mir jemand auf die Sprünge helfen könnte (ich vermute mal die Lösung hat irgenwas mit ThreadProc zu tun...) und vor allem die Lösung kurz erklären könnte, damit ich versuchen kann, es nachzuvollziehen. Denn sonst mach ich den selben Fehler beim nächsten Mal wieder, wenn ich nix verstanden hab

-
ich weis jetzt leider nicht genau wie, aber deine threadfunktion muss eine ganz bestimmte form haben (ich schau mal kurz nach ob ichs finde und reich n edit nach) ausserdem darf es glaube keine memberfunktion einer klasse sein ...
und desweiteren googlen iss da keine lösung aber die boardsuche(schau mal oben rechts) und die FAQ sollten helfen _
EDIT: ne die form scheint in ordnung ... hab mich getäuscht .... aber das mit der memberfunktion wirds wahrscheinlich sein !
-
Ist die Threadfunktion eine normale oder statische Methode? Im ersteren Fall ist's klar, daß es Probleme geben wird.
(btw, das "WINAPI" mußt du auch bei der Funktionsdeklaration mit angeben)
-
VielenDank für eure Hilfe. es funktioniert jetzt. Das mit der Memberfunktion scheint egal zu sein. Das WINAPI war auch in der Deklaration vorhanden. Aber die Threadfunktion war eine normale. Ich hab sie statisch gemacht und jetzt läuft es. Nur seltsam, dass das in keinem der Beispiele zum Thema Threads die ich durchgelesen hatte, erwähnt wurde, dass die statisch sein muss. Kann mir eigentlich jemand erklären warum?
-
ja tut mir leid ... ich hatte es iwie verpeilt ... ich hol mir erstma n kaffe (ich hasse montage)
ich vermute schlicht mal das es ein C Beispiel und kein C++ war was du da gesehen hast
-
Hallo
Nur seltsam, dass das in keinem der Beispiele zum Thema Threads die ich durchgelesen hatte, erwähnt wurde, dass die statisch sein muss. Kann mir eigentlich jemand erklären warum?
Die WinAPI ist eine reine C-Schnittstelle und kann nur mit statischen Funktionen arbeiten. Auch in allen Beispielen werden statische Funktionen verwendet, der benötigte Funktionspointer verlangt explizit eine statische Funktion. All das hätte dir sagen können das eine Membermethode nicht passt, weil Membermethode und statische Funktion verschiedene Prototypen haben.
bis bald
akari
-
Alles klar, besten Dank

-
&ThreadFunc, nicht ThreadFunc
-
Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.