我一直试图用他们的C API(libgearman)实现一个Gearman工作者。但是他们的C API文档很差,不完整。尽管它与在其他语言(如php)中创建worker非常相似,但我仍然无法通过*gearman_worker_add_function();在worker中注册函数。*
具体地说,我无法找到如何创建一个*gearman_worker_fn*对象。
谢谢!

最佳答案

根据this documentation
typedef void*(gearman_worker_fn)(gearman_job_st*作业,void*上下文,
尺寸t*结果尺寸,gearman_return_t*ret_ptr)
文件常量.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);

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

关于c - 在C中创建Gearman Worker,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6697543/

10-09 15:36
查看更多