当前位置: 首页 > 面试题库 >

从node.js本机代码调用回调

端木望
2023-03-14
问题内容

我正在使用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”错误

感谢建议


问题答案:

您不能->Call从另一个线程。JavaScript和Node是单线程的,尝试从另一个线程调用一个函数等于尝试一次运行JS的两个线程。

您应该重新编写代码以免这样做,或者应该阅读libuv的线程库。它提供了uv_async_send可用于从单独线程触发主JS循环中的回调的功能。

这里有文档:http :
//nikhilm.github.io/uvbook/threads.html



 类似资料:
  • 问题内容: 在iOS8中使用WKWebView,如何从本机端运行JavaScript函数或以其他方式从本机端与JavaScript通信?似乎没有类似于UIWebView的方法。 (我可以在该对象上使用,以允许从JS到本机进行通信,但是我正在寻找相反的方向。) 问题答案: (我在这里提出问题后不久就为此提出了雷达申请。) 几天前刚刚添加了一种新方法(感谢jcesarmobile指出): 添加 该方法

  • 我有一个最小的Android应用程序,使用启用了c支持的新项目向导创建。该应用程序的目的是允许c在捕获信号(SIGSEGV)后回调到java中。程序的顺序简短而甜蜜,伪代码就像这样: < li >输入本机方法< code>handleSegv() < ol > < li >本机代码回调到java中作为测试 < li >本机代码设置SIGSEGV处理程序 本机代码引发/发送SIGSEGV < li

  • 这可能是一个真正的新手问题,但我正在编写一个Android应用程序,它需要使用一个用C编写的.so库。该.so由几个类组成,是通用C语言,而不是JNI语言。 除了JNI之外,有没有办法从AndroidJava应用程序调用C函数?我所看到的关于JNI的一切都表明,您必须重写本机代码以特定于JNI,如果只给您一个. so,那真是太不方便了。 在Android 4.0.3中,从java应用程序调用本机函

  • 问题内容: 如何从python代码调用Shell脚本? 问题答案: 该子模块将帮助你。 显而易见的例子: 其中是一个简单的shell脚本,它是此运行的返回值。

  • 问题内容: 我正在从PHP调用python脚本。 python程序必须根据传递给它的参数返回一些值。 这是一个示例python程序,它将为您提供我目前正在做什么的基本概念: 从上面的代码中可以看到,我的基本目标是 以便python程序根据参数返回一些值(0、1、4、8等)。 然后,调用PHP的程序访问这些返回的值并执行适当的操作。 目前,我已经为此目的使用了“ sys.exit(n)”。 我使用s

  • 问题内容: 我有一个使用本机方法调用的Java应用程序,有没有办法在Eclipse中查看此代码?我可以获取此本机库的源代码,但不知道如何在IDE中进行链接。如果有人告诉我如何调试此本机方法,这也将很有帮助。 问题答案: 尚不完整的答案,但是Eclipse确实具有C / C ++ IDE功能 这里是一些信息(尽管看起来有些过时): 有关CDT / JDT集成的信息 有关从Eclipse内部创建JNI