Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di mr.and
    Registrato dal
    Dec 2008
    Messaggi
    51

    [C]Problemi con il Multi-threading(sotto windows)

    Salve,
    sto implementando un server basato su connessione su socket, che gestisce le richieste di connessione da parte dei client dedicandogli un thread apposito.
    In pratica:

    codice:
    while(1){
    connessione = accept(listenSocket, (struct sockaddr*)&Client_addr, &sin_size);
    ListaServer[n_serv++]=(HANDLE)_beginthreadex(NULL,0,(LPTHREAD_START_ROUTINE)server_dedicato,param,0,&ServID[id_serv++]);
    }
    dove server_dedicato è una funzione che riceve la struttura param(in cui è incluso il socket connessione), e , in base ai comandi inviati dal client,svolge determinate operazioni, dopodichè termina quando il client si disconnette.

    Ora, funziona tutto regolarmente alla prima richiesta di connessione, e come da programma il mio server rimane in attesa di richieste di altre connessioni da altri client, mentre il thread nato dalla beginthreadex fa il suo lavoro.Se però un client cerca di connettersi mentre il primo thread è ancora al lavoro o anche dopo che questo è terminato, la connessione viene accettata, ma server_dedicato non parte(non esegue neanche una riga di codice), anzi termina tutto.

    Non mi sembra che sia molto "concorrente" come server .Qualcuno sa come mai questo comportamento??

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Insomma se ho capito bene riesci ad eseguire solo una richiesta. Il secondo thread non parte mai.
    Bisognerebbe vedere qualcosa in piu' del codice.

    Come mai usi _beginthreadex? Stai usando la CRT?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it L'avatar di mr.and
    Registrato dal
    Dec 2008
    Messaggi
    51
    Hai ragione, è proprio la _beginthreadex il problema...usavo quella perchè sulla documentazione che ho studiato diceva che è una funzione che può essere invocata senza problemi da più thread che fanno parte dello stesso processo, a differenza della CreateThread, facendo intendere che, a parte questa differenza, fosse completamente indifferente l'uso di una o dell'altra...quando invece evidentemente così non è.

    Ti ringrazio vivamente!!

  4. #4
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Il punto è che effettivamente, non dovrebbero esserci particolari differenze (da come ho letto nei remarks velocemente), a parte un probabile uso della CRT.

    L'unica spiegazione che mi viene in mente è che forse, poichè __beginthreadex è Thread Safe sulla CRT, qualcosa vada in deadlock oppure semplicemente aspetta qualche operazione particolare, cosa che CreateThread salta senza troppi controlli.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.