else{// 初始化失败,回收 ctxskynet_error(ctx,"FAILED launch %s",name);uint32_thandle=ctx->handle;skynet_context_release(ctx);skynet_handle_retire(handle);structdrop_td={handle};skynet_mq_release(queue,drop_message,&d);returnNULL;}} 此函数一共有三个地方调用,其中有两处是在 skynet 启动...
对ctx操作,通常会先调用skynet_context_grab将引用计数+1,操作完调用skynet_context_release将引用计数-1,以保证操作ctx过程中,不会被其他线程释放掉。下面介绍几个常见的操作: struct command_func { //skynet指令结构 const char *name; const char * (*func)(struct skynet_context * context, const char ...
uint32_t handle = ctx->handle; skynet_context_release(ctx); skynet_handle_retire(handle); struct drop_t d = { handle }; skynet_mq_release(queue, drop_message, &d); return NULL; }}好长...不急,我们一点点看。struct skynet_module * mod = skynet_module_query(name);if (mod ==...
else{skynet_error(ctx,"FAILED launch %s",name);uint32_thandle=ctx->handle;skynet_context_release(ctx);skynet_handle_retire(handle);structdrop_td={handle};skynet_mq_release(queue,drop_message,&d);returnNULL;}} 在skynet_handle_register方法中生成一个服务handle,handle是一个32位的整数,在生成...
typedef int (*skynet_dl_init)(void * inst, struct skynet_context *, const char * parm); //init typedef void (*skynet_dl_release)(void * inst); //release typedef void (*skynet_dl_signal)(void * inst, int signal); //signal ...
函数的执行顺序是先执行”_create()”再执行”_init()”。而”_release”由skynet_context_release()调用来释放。而回调函数这是其他服务调用这个服务时会去调用它进行处理。服务的主要任务实现就在回调函数中处理。 注:回调函数简介 1.基本定义: 在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到...
else {skynet_error(ctx, "FAILED launch %s", name);uint32_t handle = ctx->handle;skynet_context_release(ctx);skynet_handle_retire(handle);struct drop_t d = { handle };skynet_mq_release(queue, drop_message, &d);return NULL;}} ...
skynet_context_release(ctx); return q; } 在dispatch_message完成消息的回调,看下这个函数: // 处理回调函数 static void dispatch_message(struct skynet_context *ctx, struct skynet_message *msg) { assert(ctx->init); CHECKCALLING_BEGIN(ctx) ...
skynet_context_release(ctx); skynet_handle_retire(handle); struct drop_t d = { handle }; skynet_mq_release(queue, drop_message, &d); return NULL; } } 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ...
#ifndef SKYNET_MODULE_H #define SKYNET_MODULE_H struct skynet_context; typedef void * (*skynet_dl_create)(void); typedef int (*skynet_dl_init)(void * inst, struct skynet_context *, const char * parm); typedef void (*skynet_dl_release)(void * inst); struct skynet_module { con...