PDA

Visualizza la versione completa : [C] cast


KITT
10-06-2008, 17:20
Ciao a tutti,
devo fare un cast tra un void * e una struct e non so come si fa!!!!

Ho questo questa struttura:


typedef struct parametri_ascolto {
int fdserver;
int *thread_id;
}param;


allocata,dichiarata e inizializzata così:


param *arg_ascolto = (param *)malloc(sizeof(param));

arg_ascolto->fdserver = fdg;
arg_ascolto->thread_id = (int *)tid; //---->>> verficare

usata così:


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:


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

oregon
10-06-2008, 17:33
void *ascolto(void *x)
{
param *arg = (param *)x;

int fdg = arg->fdserver;
pthread_t *tid = arg->thread_id;
...

KITT
10-06-2008, 17:44
si si grazie ora va bene :)

MacApp
10-06-2008, 17:52
Lo avevi già fatto il cast in:


param *arg_ascolto = (param *)malloc(sizeof(param));

;-)

KITT
10-06-2008, 18:06
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 :D

Purtroppo ora è insorto un altro problema.

arg_ascolto->fdserver = fdg = 3


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:


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

shodan
10-06-2008, 18:19
Passi arg_ascolto in modo sbagliato. Togli "&"

KITT
10-06-2008, 18:33
si grazie 1000

Loading