Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C] cast

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    46

    [C] cast

    Ciao a tutti,
    devo fare un cast tra un void * e una struct e non so come si fa!!!!

    Ho questo questa struttura:
    codice:
    typedef struct parametri_ascolto {
       int fdserver;
       int *thread_id;
    }param;
    allocata,dichiarata e inizializzata così:
    codice:
    param *arg_ascolto = (param *)malloc(sizeof(param));
       
       arg_ascolto->fdserver = fdg;
       arg_ascolto->thread_id = (int *)tid; //---->>> verficare
    usata così:
    codice:
       
       pthread_t tid_ascolto;
       if( ( err = pthread_create(&tid_ascolto,NULL,ascolto,&arg_ascolto) ) != 0 )
       {  printf("errore %s\n",strerror(err));   exit(1);  }
    I cast li devo fare nella funzione ascolto e sono questi:
    codice:
    void *ascolto(void *x)
    {
       struct parametri_ascolto arg = (struct parametri_ascolto )&x; //---->>> non so come si fa
       int fdg = arg.fdserver;
       pthread_t *tid = arg.thread_id;   //--->> da verificare
    ...
    ...
    Scuasate la scocciatura e grazie dell'aiuto

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    codice:
    void *ascolto(void *x)
    {
       param *arg = (param *)x; 
    
       int fdg = arg->fdserver;
       pthread_t *tid = arg->thread_id;   
    ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    46
    si si grazie ora va bene

  4. #4
    Lo avevi già fatto il cast in:
    codice:
    param *arg_ascolto = (param *)malloc(sizeof(param));
    ;-)

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    46
    MacApp in quel caso si, ma dopo alla funzione pthread_create(...) devo passare un void * che poi ridiventare param * come mi ha fatto vedere oregon

    Purtroppo ora è insorto un altro problema.

    arg_ascolto->fdserver = fdg = 3
    codice:
    param *arg_ascolto = (param *)malloc(sizeof(param));
       
       arg_ascolto->fdserver = fdgioco;
       arg_ascolto->thread_id = (int *)tid; //---->>> verficare
        
       pthread_t *tid_ascolto = crea_tid(1);
       if( ( err = pthread_create(&tid_ascolto[0],NULL,ascolto,&arg_ascolto) ) != 0 )
       {  printf("errore %s\n",strerror(err));   exit(1);  }
    nella funzione ascolta dopo aver fatto il cast:
    codice:
       param *arg = (param *)x;
       int fdg = arg->fdserver;
       pthread_t *tid = (pthread_t *)arg->thread_id;
    fdg = arg->fdserver = 13452040

    Cosa succede? in cosa sbaglio?
    Grazie ancora dell'aiuto

  6. #6
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Passi arg_ascolto in modo sbagliato. Togli "&"

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    46
    si grazie 1000

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.