problem mit _beginthread funktion

Nasenbrecher

Grünschnabel
hi,

ich hab probier seit gestern nen irc client zu proggen...

hab dazu folgendes gefunden:

http://www.tutorials.de/forum/showthread.php?p=1106996#post1106996

ich hab das versucht in eine Klasse zu bringen - allerdings kommt beim Compilieren folgender fehler:

error C2664: '_beginthread' : Konvertierung des Parameters 1 von 'void (void *)' in 'void (__cdecl *)(void *)' nicht moeglich

meine main sieht wie folgt aus:

Code:
int main(int argc, char* argv[])
{
_beginthread(scon.GetMsg, 0, (void *)scon.GetSock());
scon.SendMsg();
std::cin.get();
WSACleanup();
return 0;
}

die GetMsg-Funktion ist wie folgt implementiert:

Code:
void CIRC::GetMsg(void *m_Sock)
{
 char ausgabe[1000];
 int x = 0;
 while(1)
 {
  x = recv((SOCKET) m_Sock, ausgabe, sizeof(ausgabe), 0); 
  if(x > 0)
  {
   ausgabe[x] = 0;
   std::cout<< ausgabe << std::endl;
   if (ausgabe[0] == 'P' && ausgabe[1] == 'I' && ausgabe[2] == 'N' && ausgabe[3] == 'G')
	SendPong();

  }
  Sleep(10);
 }
}

kann mir einer helfen?
 
Ich bin mir zwar nicht ganz sicher, aber ich denke, die Threadfunktion darf keine Memberfunktion einer Klasse sein oder sie muß static sein. Bei CreateThread(...) ist das auf jeden Fall so.
 
ja ne... aber dann will der nicht auf meine membervariablen und die anderen funktionen die ich damit aufruf zugreifen

Code:
void CIRC::SendPong(void)
{
 char *Pong  = new char[sizeof(m_Input)];
 std::string PONG;
 strcpy(Pong,m_Output.c_str());
 Pong[1] = 'O';
 PONG = Pong;
 send(m_Sock, PONG.c_str(), PONG.length(), 0);
}

ich hab jetzt die anderen funktionen zwar auch static gemacht aber dann kommt solche fehlermeldungen:

error C2070: ungueltiger sizeof-Operand
error C2228: Der linke Teil von '.c_str' muss eine Klasse/Struktur/Union sein
error C2597: Ungueltige Referenz auf ein Datenelement 'CIRC::m_Sock' in einer statischen Member-Funktion
 
Mache eine globale Funktion als Threadfunktion und übergib ihr als Argument einen Zeiger auf das CIRC-Objekt. Dort rufst Du dann die SendMsg-Memberfunktion auf.
 
naja habs jetzt anders hingekriegt:

in der *.h:
Code:
static void StartThread( void* lpParam );
in der *.cpp:
Code:
void CIRC::StartThread( void* lpParam )
{
  CIRC*  tmpscon = (CIRC*)lpParam;
  tmpscon -> GetMsg();
}
in der main:
Code:
CIRC scon ...
//bissl Funktionsaufrufe
_beginthread(scon.StartThread, 0, &scon);

:)
 
Zurück