Programm absturz durch Sleep()

Hillkorn

Mitglied
Also Ich starte im Programm nur 1 extra thread der verbindungen aus dem netzwerk annimmt mit listen

wenn ich dann im Hauptprogramm jedoch Sleep benutzen will stürzt das Programm ab... es kann nichts anderes sein weil ohne Sleep läuft es ohne probleme. Weiß jemand why und wie ich dieses beheben oder umgehen kann ohne Sleep ganz rauszunehmen?
 
wie erstellst du deinen thread?
bist du dir sicher daß der thread läuft?
wie lange lässt du schlafen?
an welcher stelle deines programms steht das sleep?
ist dein programm in der kommandozeile oder hat es ein gui?


ich vermute daß ohne sleep dein hauptprogramm beendet wird und mit sleep läuft dein thread etwas länger und kommt an eine stelle wo er abstürzt!
 
mit _beginthread()
ja tut er... mein client kann jedenfalls connecten
1 sec also Sleep(1000);
in einer schleife die nach _beginthread() kommt und wie gesagt ohne sleep läuft sie
aso und die schleife ist eine endlosschleife im momment

////EDIT: Fehler liegt wohl doch woanders Sorry!

Also der fehler hängt mir dem _beginthread() zusammen

Code:
struct TFclients
{
   SOCKET sockfd;
   SOCKET c_sock[MAX_SP];
   FD_SET fdset;
};

void verbinde(SOCKET &sock,struct sockaddr_in &host_addr,struct hostent *hostinfo)
{
    WSADATA wsadata;
    if(WSAStartup(MAKEWORD(1,1), &wsadata) != 0){
       fprintf(stderr, "WSAStartup konnte Winsock nich initialisieren!\n");
       exit(EXIT_FAILURE);
       }else{
       printf("WSAStartup konnte Winsock initialisieren.\n");
       }
    
    //Socket erzeugen
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if(sock == -1){
       perror("sock()");
       }else{
       printf("Socket konnte initialisiert werden.\n");
       }
    //Host infos festlegen
    host_addr.sin_family = AF_INET;
    host_addr.sin_port = htons(5343);
    host_addr.sin_addr.s_addr = inet_addr("127.0.0.1");//5.109.238.205
    //zum Host connecten
    if(connect(sock,(sockaddr *) &host_addr, sizeof(sockaddr)) == -1){
       perror("connect");
       }else{
       printf("Die Verbindung zum Host wurde erfolgreich hergestellt.\n\n");
       }
   }
}

main teil
TFclients clients;
_beginthread(clients_annahme,0,(void *)&clients);
}
 
Zuletzt bearbeitet:
OMG ICH TROTT ^^ falsche funktion kopiert sry... is wohl net mein tag

also wenn ich _beginthread auskommentiere geht alles.

Code:
void clients_annahme(void* Vclients)
{
   TFclients clients = *(TFclients*)Vclients;
   while(1)
   {
      if(listen(clients.sockfd, 16) == -1){
         perror("listen()");
      }else{
         printf("Warten auf Verbindungsanfrage.\n");
      }
      //annehemen der Verbindung
      int sin_size = sizeof(sockaddr_in);
      sockaddr_in remote_client;
      int freiersocket = sockfrei(clients.c_sock,clients.fdset);
      clients.c_sock[freiersocket] = accept(clients.sockfd,(sockaddr *) &remote_client, &sin_size);
      FD_SET(clients.c_sock[freiersocket],&clients.fdset);
      if(clients.c_sock[freiersocket] == -1){
         perror("accept");
      }else{
         printf("Die Anfrage wurde angenommen und ein Socket wurde erstellt fuer den Clienten.\n\n");
      }
   }
}

main()
{
TFclients clients;
_beginthread(clients_annahme,0,(void *)&clients);
}
 
Nun ja, aber dann startet das aber doch keinen thread, oder?

Jedenfalls, ich liege wahrscheinlich richtig damit, dass du die var tfclients (oder so :-) )
auch im main danach noch verwenden wirst, oder?
Im Thread fällt mir ganz am Anfang nämlich auf, dass du mit einer Kopie von der Variablen herum zu tun anfängst, und die var im main nichts davon mitbekommt :-)
vielleicht war das ja der gedankenfehler, denn mit dem beginthread stimmt alles.

statt
TFclients clients = *(TFclients*)Vclients;
schreibst du am besten einfach
TFclients &clients = *(TFclients*)Vclients;
und lasst den rest unverändert

wenn du die var im main nicht mehr brauchst, sag noch einmal, dann kanns das nicht sein.

gruß
 
Also erstma danke... ja wollte die Var weiterhin benutzten

Jedoch besteht der fehler weiterhin das das Programm abstürzt why auch immer.

Hab jedoch noch was bemerkt!
Wenn ich kompiliere muss ich erst meiner FW sagen das das Programm ins netz darf und solange ich dies nicht mache stürzt es nicht ab.
Es stürzt auich ab wenn ich die funktion normal aufrufe....
 
Zuletzt bearbeitet:
Aha das heisst der fehelr sollte in den socketfunks liegen, die werden dann blockiert...
lass mir ein bisschen untersuchzeit...
 
also ohne die anderen funktionen find ich da nix

sorry aber ich kann erst morgen weitermachen, bin heute schon zu lang munter

nacht
 
Also fehler is behoben das es abstürzt... hab im hauptprogramm vergessen der struktur den socket der die die verbindungen annimmt richtig zuzuweisen glaub ich

aber hab jetz nen anderes Problem was ich aber grad versuche zu beheben
 
Zurück