2010-05-22 3 views
0

je veux travailler avec 2 file d'attente dans le module où je change mon pointeur pour les donc je dois utiliser:unix DECLARE_WAIT_QUEUE_HEAD (var) var prototype?

//declartion 
wait_queue_head_t **currentQ; 
DECLARE_WAIT_QUEUE_HEAD (readWaitQ1); 
DECLARE_WAIT_QUEUE_HEAD (readWaitQ2); 

if(condition){ 
    currentQ = &readWaitQ1; 
}else{ 
    currentQ = &readWaitQ2; 
} 

mais je reçois type incorrect pour wake_up une autre substance en utilisant la file d'attente. même pensé que je google je ne pourrais pas trouver une réponse que quelqu'un peut me donner le prototype nécessaire ...

Répondre

1

Depuis la macro est (voir here):

#define DECLARE_WAIT_QUEUE_HEAD(name) \ 
    wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name) 

cela signifie que:

DECLARE_WAIT_QUEUE_HEAD (readWaitQ1); 

se traduit:

wait_queue_head_t readWaitQ1 = ...; 

avec votre curr Code ent:

wait_queue_head_t **currentQ; 
currentQ = &readWaitQ1; 

vous avez un trop grand nombre indirections sur currentQ. Vous devriez essayer:

wait_queue_head_t *currentQ; 

à la place.

+0

merci, j'ai utilisé d'autres fonctions où le compilateur n'a pas crié à moi et cela m'a fait confus – yoavstr