Uv_queue_work没有在node插件(c++)中运行callback_method
uv_queue_work does not run callback_method in node addon (c++)
我正在制作c++中的节点插件,我希望能够从其他线程进行回调。为了尝试它,我使用uv_queue_work和Nan进行以下测试。如果我调用函数Hello,它应该为方法firstMethod启动一个新线程,当它完成时,在另一个线程中调用下一个方法"callbackMethod",在那里我将对Javascript进行回调。但是由于某种原因,它运行了第一个方法而没有运行第二个方法。
这是我的代码。
void Hello(const v8::FunctionCallbackInfo<v8::Value>& args) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::HandleScope scope(isolate);
v8::Local<v8::Function> callback;
callback = args[0].As<v8::Function>();
ListBaton* baton = new ListBaton();
baton->callback = new Nan::Callback(callback);
uv_work_t* req = new uv_work_t();
req->data = baton;
uv_queue_work(uv_default_loop(), req, firstMethod, callbackMethod);
}
void firstMethod(uv_work_t* req) {
std::cout << "Entering PRE thread" << std::endl;
sleep(1);
std::cout << "Leaving PRE thread" << std::endl;
}
void callbackMethod(uv_work_t* req, int status) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::HandleScope scope(isolate);
if(!isolate)
{
std::cout << "Isolate was null" << std::endl;
isolate = v8::Isolate::New();
isolate->Enter();
}
ListBaton* data = static_cast<ListBaton*>(req->data);
v8::Local<v8::Value> argv[2] = {
v8::Undefined(isolate),
v8::String::NewFromUtf8(isolate,"WORLD")
};
std::cout << "Sending callback" << std::endl;
data->callback->Call(2,argv);
}
void init (v8::Handle<v8::Object> target) {
NODE_SET_METHOD(target, "hello", Hello);
}
NODE_MODULE(HelloNan, init);
如果你们能帮我这个忙,我会非常感激的。
如果它是实际的尝试遵循而不是您的data->callback->Call(2,argv);
// execute the callback
Local<Function>::New(isolate, data->callback)->Call(isolate->GetCurrentContext()->Global(), 2, argv);
// Free up the persistent function callback
data->callback.Reset();
delete data;
相关文章:
- "LRESULT CALLBACK WinProc"和"LRESULT WINAPI WinProc"的区别
- nodejs addon async callback with libuv
- CALLBACK macro (QT)
- ZeroMQ 中的 SUB 订阅者是否像 ROS 中那样具有任何"callback"机制?
- 将一个主题中的数据放入 Callback 函数中的动态数组中并进行一些计算
- 我应该按什么顺序发送callback()并通知服务员?
- C++可以在接口中使用Chromium base::callback
- boost::shared_ptr destroy callback
- uMsg 参数在 CALLBACK DialogProc() 的定义中是什么意思?
- Lua callback from C++
- Python Callback from SWIG PyObject_Call Segfault
- EnumDisplayMonitors EnumProc Callback
- c++中用于Callback / RPC的动态函数参数
- 检查客户端在c++中是否设置了callback
- callback vs lambda
- Wxwidgets callback
- 在callback和main之间传递一个变量
- C-callback to function template:显式实例化模板
- 为什么在这个函数中使用LRESULT CALLBACK
- 在Win-32 c++应用程序中CALLBACK关键字是什么意思?