Problem mit afxbeginthread
-
Hallo,
ich möchte einen (worker)thread starten, die aufgerufene Funktion ist diese:
static UINT KeyListener(LPVOID Pparam) { //machwas }Der Aufruf sieht so aus:
CWinThread* test; test = CWinThread* AfxBeginThread( KeyListener, cwnd, THREAD_PRIORITY_NORMAL, 0, 0, NULL);Die Fehlermeldung lautet:
error C2275: 'CWinThread' : illegal use of this type as an expressionund kommt für die Zeile mit dem NULL.
Nun steht da, ich solle die Deklaration von CWinThread angucken, aber da steht der Aufruf genau so da, wie ich ihn jetzt habe, auch diese NULL.
Ich habe im MSDN gelesen und auch hier gesucht, aber nichts "passendes" gefunden.
Was ist falsch, weiß jemand Rat?
Vielen Dank schonmal für evtl. Tipps.Christian
-
kox schrieb:
Was ist falsch, weiß jemand Rat?
Du schreibst beim Funktionsaufruf den Rückgabetypen davor. Das tut man nicht.
-
Sprich: Es reicht, wenn du schreibst:
test = AfxBeginThread(....)
-
Oh Mann ey

Vielen Dank, nun meckert es nicht mehr!
Und ein herzliches wow für 2 Antworten in 5 Minuten!
Christian
-
hallo leute
kann mir mal einer helfen? ich versteh einfach nicht wieso er "hallo" nicht ausgibt.
CWinApp theApp; using namespace std; UINT MyThread(LPVOID Pparam) { cout << "hallo"; return 0; } int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // MFC initialisieren und drucken. Bei Fehlschlag Fehlermeldung aufrufen. if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO: Passen Sie den Fehlercode an Ihre Anforderungen an _tprintf(_T("Schwerwiegender Fehler: MFC-Initialisierung fehlgeschlagen\n")); nRetCode = 1; } else { AfxBeginThread(MyThread, 0); } return nRetCode; }
-
prgmeror schrieb:
kann mir mal einer helfen? ich versteh einfach nicht wieso er "hallo" nicht ausgibt.
Weil dein Haupthread (_tmain) beendet ist, bevor der andere Thread dazu kommt, eine Ausgabe zu machen. Und wenn der Hauptthread endet, endet das ganze Programm.
-
ah, danke, ich hab das jetzt mit getch() gelöst
-
getch() gibts noch?!
-
Hallo
entschuldigt, ich muss mal ganz dumm fragen. in euren beispielen sieht es so aus als ob ihr einfach eine globale funktion nehmt und diese als thread startet. das wäre ja echt klasse wenn es so einfach ginge. ich kenne es nur das eine klasse von cwinthread abgeleitet werden muss und diese das mittels der überladenenen funktion RUN gestartet werden kann.
wenn ich es bei mir jetzt versuche wie bei euch, ich habe eine dialoganwendung, eine globale funktion und auf einen buttonklick will ich den thread starten, so bekomme ich immer fehlermeldungen schon beim kompilieren.
error C2665: "AfxBeginThread": Durch keine der 2 Überladungen konnten alle Argumenttypen konvertiert werden.die funktion sieht im gerüst so aus:
int StartCapture(LPVOID Pparam) { ... return 0 }den aufruf habe ich wie bei euch oben versucht:
void CTest1Dlg::OnBnClickedCaptureButton1() { CCapThread* test; test = AfxBeginThread( StartCapture, 0, THREAD_PRIORITY_NORMAL, 0, 0, NULL); ... }kann mir jemand vielleicht sagen wieso sich der kompiler so streubt???
-
ok, habs gefunden, es lag am int vor der funktion, habe es durch UINT ersetzt und schon kompiliert er es