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


Log in to reply