我正在使用c ++编写node.js的附加组件。
这里有一些片段:
class Client : public node::ObjectWrap, public someObjectObserver {
public:
void onAsyncMethodEnds() {
Local<Value> argv[] = { Local<Value>::New(String::New("TheString")) };
this->callback->Call(Context::GetCurrent()->Global(), 1, argv);
}
....
private:
static v8::Handle<v8::Value> BeInitiator(const v8::Arguments& args) {
HandleScope scope;
Client* client = ObjectWrap::Unwrap<Client>(args.This());
client->someObject->asyncMethod(client, NULL);
return scope.Close(Boolean::New(true));
}
static v8::Handle<v8::Value> SetCallback(const v8::Arguments& args) {
HandleScope scope;
Client* client = ObjectWrap::Unwrap<Client>(args.This());
client->callback = Persistent<Function>::New(Handle<Function>::Cast(args[0]));
return scope.Close(Boolean::New(true));
}
我需要保存一个javascript函数作为回调以便稍后调用它。 Client类是另一个对象的观察者,应该从onAsyncMethodEnds调用javascript回调。 不幸的是,当我调用函数“BeInitiator”时,我在回调Call()
之前收到“Bus error:10”错误感谢您的建议
答案 0 :(得分:3)
你不能从另一个帖子->Call
。 JavaScript和Node是单线程的,试图从另一个线程调用一个函数就等于试图同时运行两个JS线程。
您应该重新编写代码而不是这样做,或者您应该阅读libuv
的线程库。它提供了uv_async_send
,它可以用来从一个单独的线程触发主JS循环中的回调。