gpt4 book ai didi

javascript - uv_queue_work 不在 Node 插件中运行 callback_method (c++)

转载 作者:太空狗 更新时间:2023-10-29 23:01:06 29 4
gpt4 key购买 nike

我正在用 C++ 制作一个 Node 插件,我希望能够从其他线程进行回调。为了尝试,我正在使用 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);

如果你们能帮我解决这个问题,我将不胜感激......

最佳答案

如果确实如此,请尝试按照而不是您的数据->回调->调用(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;

关于javascript - uv_queue_work 不在 Node 插件中运行 callback_method (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31884720/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com