CreateThread [ Gelöst ]
-
// Edit: -.-'' is mir jetzt nen bissel peinlich aber ich hab einfach vergessen die variable die ich in
Sock->getState()abfrage auf true zu setzen, sorry.
Hi,
also ich schlag mich hier gerade nen bissel mit threads rum, oder will es zumindest ^^
DWORD WINAPI KeepConnAliveThread(PVOID lParam){ WinSock * Sock = (WinSock *)lParam; while (Sock->getState()){ if ( ConnectingFunc(Sock->List,Sock->acceptSocket))Sock->addClient();// Die funktion addClient macht er nicht } return 1; } bool ConnectingFunc( MyList * List, SOCKET AcceptSocket ){ SOCKET * Client = new SOCKET; *Client = accept(AcceptSocket,NULL,NULL);// Scheint zu funktionieren da der client erfolg meldet. if ( *Client == INVALID_SOCKET ){ printf("ERROR: Accept() : %d\n",WSAGetLastError());// Diese ausgabe erscheint nicht delete Client; return 0; }else{ printf("Neue Verbindung akzeptiert.\n");// Diese ausgabe erscheint nicht List->Object = (PVOID)Client; if ( !List->GetNext() )List->Add();// Zeigt sich auch nicht im debugger List = List->GetNext(); return 1;// } }also ich will mit dem thread einfach versuchen alle connections die ankommen anzunehmen und dann halt in meiner liste zu speicher ( das ist nicht mal so wichtig jetzt )
mein problem ist das wenn ichs starte und nen clienten drauf loslasse dieser zwar connected es aber nicht in meiner klasse landet.
ich wollt mal fragen ob ich denn jetzt die objecte mit GlobalAlloc anlegen muss statt new oder ob das nen anderer fehler sein könnte.
übrigens. so rufe ich es auf..
void WinSock::StartServer( short Port, short MaxConnections ){ itsPort = Port; acceptSocket=socket(AF_INET,SOCK_STREAM,0); if(acceptSocket==INVALID_SOCKET){ printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); printf("Closing...\n"); this->~WinSock(); }else{ printf("Socket erstellt!\n"); } addr.sin_family=AF_INET; addr.sin_port=htons(itsPort); addr.sin_addr.s_addr=ADDR_ANY; rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR){ printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); printf("Closing...\n"); this->~WinSock(); }else{ printf("Socket an port %d gebunden\n",itsPort); } rc = listen(acceptSocket,MaxConnections); if ( rc == SOCKET_ERROR ){ printf("ERROR: Lisent: %d\n",WSAGetLastError()); printf("Closing...\n"); this->~WinSock(); }else{ printf("Socket lisents...\n"); } this->hKeepAlive = CreateThread( NULL, 0, KeepConnAliveThread, (PVOID)this, 0, &this->dwKeepAlive ); }//Edit
Also in meinem buch über netbios hatten die auch ne variable die se im thread benutzt hatten, und die hams über globalalloc gemacht und das hat funktioniert. wenn ich das jetzt allerdings machen will dann allokiert er speicher ruft jedoch den konstruktor nicht auf, und das is nen ziemliches problem für mich ^^ kann mir da bitte wer helfen.