Externe Member Variable in Thread inkrementieren
-
Hallo, ich habe einen Thread in dem eine Member Variable von außerhalb inkrementiert werden soll, nur funktioniert es so nicht.
Aufruf:
void CDlg_Clients::FillFrameListBox() { m_WorkerThread = AfxBeginThread(FillTheListboxWTItemData,this,THREAD_PRIORITY_NORMAL); return ; }
Thread:
UINT FillTheListboxWTItemData(LPVOID pParam) { CDlg_Clients pKlasse = pParam; pKlasse->m_sPos++; return THREAD_END_DELETED; }
Beim kompilieren erfolgt die Fehlermeldung:
error C2440: 'initializing' : cannot convert from 'void *' to 'class CDlg_Clients'Der Hund liegt sicher im Detail, aber wie ist es richtig?
-
Ja, C++ unterstützt keine implizite Umwandlung von void* in einen konkreten Zeigertyp (schon gar nicht in einen Nicht-Zeiger), da mußt du schon explizit casten:
CDlg_Clients* pKlasse = (CDlg_Clients*) pParam; //oder für die Anhänder der C++ casts: CDlg_Clients* pKlasse = static_cast<CDlgClients*>(pParam);
(btw, der Stern dort ist kein Fliegendreck, sondern hat eine essentielle Bedeutung ;))
-
Gewußt wie, besten dank es funktioniert