我正在创建一个节点 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);
调用 uv_queue_work 对于一次性工作来说很好,我可能会通过链接对uv_queue_work
from的调用来任意调用我after_work_cb
,同时work_cb
与另一个线程同步,但我想知道是否没有更直接的方法来做到这一点。
就像 node.js 提供的 fn 一样,它可以被任何其他线程直接调用,fn 指针指向下一次要在主 js 线程上执行的代码。任何的想法?