Reputation: 1292
I am newbie in nodeJS and node extension. I m writing a native extension for node js which will receives a callback on an virtual function OnEvent(param1, param2, param3). The code follows:
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;
}
I need to forward this callback parameters to the server script using m_EventCallback.The function bool OnEvent is called from a different thread.
I tried using uv_async_send but couldn't succeed.
Any help or guidance will be appreciated.
Upvotes: 6
Views: 3328
Reputation: 4597
Maybe uv_callback would be an option.
With it we can call functions on other threads.
It can handle non-coalescing calls.
We can even get the result in the caller thread on another function asynchronously. eg:
In the called thread:
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);
In the calling thread:
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);
Upvotes: 1
Reputation: 60043
Using uv_async_send is the correct way:
http://nikhilm.github.com/uvbook/threads.html
Upvotes: 6