Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577

    [C++] Bug di reset inaspettato di variabile con thread

    Ciao,
    ho un progetto in C++ il quale alla sua esecuzione legge una lista di numeri

    100
    25
    37
    48

    e memorizza il suo numero in una variabile globale per il suo utilizzo da parte di alcuni cicli.

    Quello che non mi spiego è che senza generare alcun errore tale variabile dopo un certo numero di cicli si azzera e forse mi sfugge qualcosa che non ho ancora assimilato in merito alle eccezioni ed ai thread.
    codice:
    DWORD WINAPI ThreadPro( LPVOID lpParameter )
    {
            FILE *fp;
            char tmpbuf[20];
            int n=0;
    
            fp=fopen("lista.txt","r");
            while(fgets(tmpbuf,sizeof(tmpbuf),fp) != NULL)
            {
                    tmpbuf[strlen(tmpbuf)-1]='\0';
                    ArrayLista[n++]=atoi(tmpbuf);
            }
            fclose(fp);
    
           
             while(!bAbort)    // ciclo all'infinito XY
            {
                 for(int i=0; i < n; i++)
                         SendMyMessage(ArrayLista[i]);
                // qui in maniera pseudocasuale n si azzera nonostante
                // il codice esterno al while non viene più letto, ma solo allo start del thread
             }
    }
    
    void SendMyMessage( char *msg)
    {
         for(int actconn = 0; actconn < Form1->ServerSocket1->Socket->ActiveConnections; actconn++)
                            Form1->ServerSocket1->Socket->Connections[actconn]->SendBuf(msg, len);
    }
    magari mi sfugge qualcosa

    Grazie 1000

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,337
    Prima di tutto, mi spieghi come mai in

    SendMyMessage(ArrayLista[i]);

    passi un argomento tramite puntatore a char anche se mi mi sembra un intero ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    purtroppo è un errore di copia e incolla, grazie per avermelo fatto notare

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,337
    Quote Originariamente inviata da misterx Visualizza il messaggio
    purtroppo è un errore di copia e incolla, grazie per avermelo fatto notare
    Prego ma non capisco come possa essere un errore di copia incolla ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    scusa ma quello è solo un pseudo-codice di esempio, mi interessa solo capire come si ragiona con i thread.
    Ho scoperto che se int n; lo dichiaro globale anziché locale, il problema sparisce. Aggiungo che non osservo alcun tipo di errore durante il funzionamento del programma, non mi spiego quindi l'azzeramento della variabile n.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,337
    Se lo stack viene sporcato e la variabile modificata non dipende dalla questione thread ma da errori nel codice.
    Ma se non mostri il codice effettivo in cui succede il problema, di che discutiamo?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    grazie Oregon, mi hai messo comunque sulla strada giusta dicendomi che i thread non c'entrano nulla.
    Era un problema di allocazione di memoria che causava un errore alquanto depistante. Sto usando una DLL dove hanno modificato le dichiarazioni a certe strutture ed a me era sfuggita questa variazione.

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 © 2020 vBulletin Solutions, Inc. All rights reserved.