Eug*_*sky 5 multithreading node.js
我正在创建一个节点C++插件,它应该回调一个js函数,因为事件是由一些不受我控制的其他线程触发的(它实际上是我使用的托管dll的.net线程).由于JS世界是单线程的,我不能只保留js函数引用并从非js线程调用它.我甚至无法创建我想传递给该线程上的回调函数的参数.
我已经看到uv_queue_work在你希望从js线程移动工作并且一旦完成并且从js线程回调以执行你需要做的任何事情的情况下使用,例如回调一个js函数.
供以后参考,这是函数的签名:
int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb,
uv_after_work_cb after_work_cb);
Run Code Online (Sandbox Code Playgroud)
调用uv_queue_work对于一次性工作来说很好,而且我可能会通过链接uv_queue_work来自from的调用来任意调用我after_work_cb,同时work_cb与其他线程同步,但我想知道是否有更简单的方法来执行它.
就像node.js提供的fn一样,可以被任何其他线程直接调用,其中fn指针指向下一次在主js线程上执行的代码.任何的想法?
您应该查看uv_async_*函数(请参阅https://github.com/joyent/libuv/blob/master/include/uv.h),而不是使用uv_queue_work .
可以在节点sqllite项目https://github.com/developmentseed/node-sqlite3/blob/master/src/async.h中找到一个非常好的实现.
只是注意然而,如果你不EXTREMELY小心这东西,你最终会与一些TERRIBLE循环引用计数的bug(程序退出提前,或者根本没有)
| 归档时间: |
|
| 查看次数: |
3757 次 |
| 最近记录: |