ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
1452
1452
EMPFEHLEN
-
03.11.05 17:58 #1
- Registriert seit
- Oct 2004
- Beiträge
- 5
hi,
ich hab probier seit gestern nen irc client zu proggen...
hab dazu folgendes gefunden:
http://www.tutorials.de/forum/showth...96#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 :1 2 3 4 5 6 7 8
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
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.
-
03.11.05 18:22 #3
- Registriert seit
- Oct 2004
- Beiträge
- 5
ja ne... aber dann will der nicht auf meine membervariablen und die anderen funktionen die ich damit aufruf zugreifen
Code :1 2 3 4 5 6 7 8 9
[font=Arial]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;[/font] [font=Arial] send(m_Sock, PONG.c_str(), PONG.length(), 0); }[/font]
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.
-
03.11.05 19:55 #5
- Registriert seit
- Oct 2004
- Beiträge
- 5
naja habs jetzt anders hingekriegt:
in der *.h:
in der *.cpp:Code :1
static void StartThread( void* lpParam );
in der main:Code :1 2 3 4 5
void CIRC::StartThread( void* lpParam ) { CIRC* tmpscon = (CIRC*)lpParam; tmpscon -> GetMsg(); }
Code :1 2 3
CIRC scon ... //bissl Funktionsaufrufe _beginthread(scon.StartThread, 0, &scon);
Ähnliche Themen
-
Problem mit _beginthread
Von colt4ever im Forum C/C++Antworten: 11Letzter Beitrag: 31.03.10, 08:17 -
Allegro kennt _beginthread nicht
Von Windhund im Forum C/C++Antworten: 3Letzter Beitrag: 13.05.09, 22:01 -
wie _beginthread, socket abschießen ?
Von cyberds19 im Forum VisualStudio & MFCAntworten: 2Letzter Beitrag: 31.07.08, 17:25 -
Problem mit Funktion
Von Kein Genie im Forum PHPAntworten: 0Letzter Beitrag: 30.11.06, 13:16 -
_beginthread und void*
Von unmatrix im Forum VisualStudio & MFCAntworten: 3Letzter Beitrag: 04.10.05, 16:23





Zitieren
Login






