Error bei Thread
-
Ich habe folgenden Thread (der als Stopuhr funktioniert):
UINT CThread001Dlg::thrFunction(LPVOID pParam) { int* pFlag = (int*) pParam; while (*pFlag) { Sleep(1); m_iZeitMS+=1; } return 0; }
Dies sind die Funktionen zum Starten und Stoppen:
void CThread001Dlg::OnButtonstart() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen m_Flag = 1; m_iZeitMS = 0; CWinThread* pThread = AfxBeginThread (thrFunction, &m_Flag); } void CThread001Dlg::OnButtonstop() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen m_Flag = 0; CString m_strZeitMS; m_strZeitMS.Format("%d", m_iZeitMS); MessageBox(m_strZeitMS); }
Die Vareable m_iZeitMS habe ich (mit dem Assistenen) erstellt.
Nun bekomme ich beim Kompielen folgenden Error:d:\C-Programme\Thread001\Thread001Dlg.cpp(183): error C2597: Ungültiger Verweis auf nicht-statischen Member 'CThread001Dlg::m_iZeitMS'
Wo liegt der Fehler??????
mfg
Fink ChristophP.S.: Ist mein erster Thread und ich benütze VS .net!
-
Deine Threadfunktion ist eine statische Funktion. Die Variable m_iZeitMS dagegen nicht! Man kann nicht von einer statischen Funktion auf ein nichtstatisches Member zugreifen, wie es die Fehlermeldung auch schon sagt. Du könntest zb die Variable m_iZeitMS static machen, dann funktioniert es.
-
Wenn ich das mache kommt folgender Error:
Time-Thread error LNK2001: Nichtaufgeloestes externes Symbol "private: static int CTimeThreadDlg::m_iZeitMS" (?m_iZeitMS@CTimeThreadDlg@@0HA)
-
static-Variablen sollten public definiert sein und mit einem Wert initialisiert werden.
-
Original erstellt von pfalzmarc:
mit einem Wert initialisiert werden.?????????
Wenn ich sie nur als public definiere kommt der selbe Fehler.
-
schreib irgendwo global in Deinem cpp-File
CTimeThreadDlg::m_iZeitMS=(time_t)0;
-
?????????????????????????????????????????????????????????????????????
d:\C-Programme\Time-Thread\Time-ThreadDlg.cpp(11): error C2501: 'CTimeThreadDlg::m_iZeitMS' : Fehlende Speicherklasse oder Typspezifizierer
?????????????????????????????????????????????????????????????????????
-
UUps - sorry. Wie die Fehlermeldung schon sagt musst Du auch den Typ dazuschreiben:
CTime CTimeThreadDlg::m_iZeitMS=(time_t)0;
-
Ich habe eine int Vareable und so habe ich int genommen und dann hats funktioniert. Danke
-
dort findest Du bessere methoden:
http://mitglied.lycos.de/ehenkes/mfc_einsteigerbuch_kapitel17.htm