3

我一直在尝试用他们的 C API (libgearman) 实现一个 Gearman 工作者。但是他们的 C API 文档很差而且不完整。虽然它非常类似于用其他语言(如 PHP)创建工作者,但我仍然无法通过 *gearman_worker_add_function();* 在工作者中注册函数

具体来说,我无法找出如何创建 *gearman_worker_fn* 的对象。

谢谢!

4

1 回答 1

7

根据此文档

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

在文件 constants.h 的第 407 行定义。

这是一个函数指针 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);

请注意,我只是传递了函数名——这会降级为“函数指针”。

于 2011-07-14T18:06:21.580 回答