Threadfunktion
-
Hi, ich hoffe es ist noch jemand online.
ich hab da folgendes:
typedef UINT (*pFUNC)(LPVOID pParam); void CFillListenSocket::FillList(pFUNC pFunc ) { CWinThread pThread=AfxBeginThread(pFunc); } M:\C++\Stefan\Server2\FillListenSocket.cpp(52) : error C2665: 'AfxBeginThread' : Durch keine der 2 Ueberladungen kann Parameter 1 vom Typ 'unsigned int (__cdecl *)(void *)' konvertiert werden

-
Ich sehe zwar keine Frage...
, aber:Die Funktion muss ein UINT zurückgeben (nicht void) und sollte static sein (wenn sie es nicht schon ist).
-
Ich möchte den Zeiger auf die Threadfunktion an eine Funktion übergeben, in der ich dann mittels ebendieser Thradfunktion den Thread aufrufe. Und das klappt nicht (siehe Fehlermeldung)!

-
Pardon, hatte den Text nur schnell überflogen - dachte FillList ist deine Thread Funktion.
Nutze einfach AFX_THREADPROC statt pFUNC.
-
void CFillListenSocket::FillList(AFX_THREADPROC pFunc,LPVOID pParam )
{
CWinThread pThread=AfxBeginThread(pFunc);
}Das gibt genau die gleiche Fehlermeldung.

-
Jetzt sehe ich es.

Du nimmst auch die falsche Überladung von AfxBeginThread.
Du musst mindestens 2 Parameter angeben.btw: AfxBeginThread gibt einen Zeiger auf ein CWinThread-Objekt zurück.
-
void CFillListenSocket::FillList(AFX_THREADPROC pFunc,LPVOID pParam )
{
CWinThread* pThread=AfxBeginThread( pFunc,pParam);
}Hast recht, habe ich auch gemerkt, und außerdem muss natürlich CWinThread[u]* heißen.
Vielen Dank!
-
Ich hoffe du bist noch da.
static UINT MyUpdateList(LPVOID pParam); UINT CFillListenSocket::MyUpdateList(LPVOID pParam) { for(short i=0;i<m_oaSockets.GetSize();i++) { if( ((CFillSocket*) m_oaSockets.GetAt(i))==(CFillSocket*)pParam) continue; Sleep(0); CString str; str.Format("%d",UPDATEKALENDAR); ((CFillSocket*)m_oaSockets.GetAt(i))->Send(str,str.GetLength()); Sleep(100); } return 1; }Jetzt meint der Compiler er kennt das m_oaSockets nicht, obwohl es privat deklariert ist. Hmh?????????
-
Ich glaub ich weiß schon, m_oaSockets muss auch statisch sein!

-
Kann ja auch nicht gehen da deine ThreadFunktion static ist (static Funktionen haben keine this-Zeiger).
Starte deinen Thread mit AfxBeginThread. Als Parameter wird der Zeiger auf deine Klasse übergeben. In der ThreadFunktion startest du mit Hilfe des Zeigers deine Methode die du ausführen möchtest.
-
Hört sich auch gut an. Ich hab das Ganze jetzt sowieso viel leichter gemacht. Läuft auch gut soweit. Bin schon zwei Probleme weiter. Hab im Moment Ärger mit ner Sql-Abfrage. Vielen Dank für deine Hilfe.
-
Gut Nacht!
