从NodeJS本地扩展中的不同线程callback

我是nodeJS和节点扩展的新手。 我为节点js写一个本地扩展,它将接收虚函数OnEvent(param1,param2,param3)上的callback。 代码如下:

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将此callback参数转发到服务器脚本。函数bool OnEvent从另一个线程中调用。

我尝试使用uv_async_send,但不能成功。

任何帮助或指导将不胜感激。

使用uv_async_send是正确的方法:

  • 在“主”线程上调用uv_async_init。
  • 然后从你的worker调用uv_async_send。
  • 不要忘了uv_close重新回到主界面。

http://nikhilm.github.com/uvbook/threads.html

也许uv_callback将是一个选项。

有了它,我们可以在其他线程上调用函数。

它可以处理非合并呼叫。

我们甚至可以asynchronous地在另一个函数的调用者线程中得到结果。 例如:

在被调用的线程中:

 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);