2011-07-14 2 views
3

J'ai essayé d'implémenter un worker Gearman avec son API C (libgearman). Mais leur documentation pour l'API C est mauvaise et incomplète. Bien que ce soit très similaire à la création de travailleurs dans d'autres langages tels que PHP, je ne peux toujours pas enregistrer une fonction dans le worker via * gearman_worker_add_function(); *Création d'un worker Gearman dans C

Pour être précis, je suis incapable de trouver comment créer un objet de * gearman_worker_fn *.

Merci!

Répondre

6

Selon this documentation:

typedef void * (gearman_worker_fn) (gearman_job_st * emploi, void * contexte, size_t * result_size, gearman_return_t * ret_ptr)

Définition à la ligne 407 de constantes de fichiers. h.

Ceci est un pointeur de fonction typedef: Fondamentalement, il vous suffit de créer une fonction avec la signature correcte (retourne void *, prend en gearman_job_st *, void *, size_t *, gearman_return_t *), et passe ensuite au nom de la fonction.

Exemple:

void *do_work(gearman_job_st *job, void *context, size_t *result_size, gearman_return_t *ret_ptr) 
{ 
    do_something(); 
} 

/* Later... */ 

    gearman_worker_add_function(worker, function_name, timeout, do_work, context); 

Notez que je passe juste la fonction ce dégrade Nom-Mettez un « pointeur de fonction ».

+0

Cela prend tout son sens. Merci ! – crozzfire

+0

Pas de problème. Merci pour la tique, mais n'hésitez pas à voter moi aussi si la réponse s'avère utile ;-) –