Создание Gearman Worker в C - PullRequest
3 голосов
/ 14 июля 2011

Я пытался реализовать работника Gearman с их C API (libgearman).Но их документация для C API плохая и не полная.Хотя это очень похоже на создание работников на других языках, таких как PHP, я все еще не могу зарегистрировать функцию в работнике с помощью * gearman_worker_add_function (); *

Если быть точным, я не могу узнать, каксоздать объект * gearman_worker_fn *.

Спасибо!

1 Ответ

6 голосов
/ 14 июля 2011

Согласно этой документации :

typedef void * (gearman_worker_fn) (gearman_job_st * job, void * context, size_t * result_size, gearman_return_t * ret_ptr)

Определение в строке 407 файла constants.h.

Это указатель на функцию typedef: в основном вам просто нужно создать функцию с правильной сигнатурой (возвращает void *, принимает gearman_job_st *, void *, size_t *, gearman_return_t *), а затем передайте имя функции.

Пример:

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);

Обратите внимание, что я просто передаю имя функции--это ухудшается до «указателя на функцию».

...