我是nodeJS和节点扩展的新手。我正在为节点js编写一个本机扩展,它将在虚函数OnEvent(param1,param2,param3)上接收回调。代码如下:
bool MyExt::OnEvent(int eventType, string param1, string param2)
{
printf("MyExt:: onevent___ \n");
{
//// Crashes here, but if I use Locker, it get stuck!!!!!!
//Locker l;
Local<Value> argv[3] = {
Local<Value>::New(Integer::New(1)),
Local<Value>::New(String::New("parameter 1")),
Local<String>::New(String::New("parameter 2"))
};
TryCatch try_catch;
//// I need to call this
m_EventCallback->Call(Context::GetCurrent()->Global(), 3, argv);
if (try_catch.HasCaught()){
printf("Callback is Exception() \n");
}
printf("Callback is IsCallable() \n");
}
return true;
}
我需要使用m_EventCallback将此回调参数转发到服务器脚本。函数bool OnEvent是从另一个线程调用的。
我尝试使用uv_async_send但无法成功。
任何帮助或指导都将不胜感激。
答案 0 :(得分:6)
使用uv_async_send是正确的方法:
答案 1 :(得分:1)
也许uv_callback可能是一种选择。
有了它,我们可以在其他线程上调用函数。
它可以处理非合并调用。
我们甚至可以异步地在另一个函数的调用者线程中获得结果。例如:
在被调用的帖子中:
uv_callback_t send_data;
void * on_data(uv_callback_t *handle, void *data) {
int result = do_something(data);
free(data);
return (void*)result;
}
uv_callback_init(loop, &send_data, on_data, UV_DEFAULT);
在调用线程中:
uv_callback_t result_cb;
void * on_result(uv_callback_t *handle, void *result) {
printf("The result is %d\n", (int)result);
}
uv_callback_init(loop, &result_cb, on_result, UV_DEFAULT);
uv_callback_fire(&send_data, data, &result_cb);