gpt4 book ai didi

javascript - 在 native Node 的回调中调用回调

转载 作者:行者123 更新时间:2023-11-28 04:57:07 25 4
gpt4 key购买 nike

我是一个 Node 和 C++ 新手,所以请保持冷静。

我正在编写一个本地 Node 插件。

我的插件启动了网络摄像头流(使用 UVC 库),我希望每个帧都可用于 Node 。

我的 CC 插件做类似的事情

uvc_start_streaming(devh, &ctrl, frameProcess, (void *) &args, 0)

地点:

  • devh: 是UVC设备
  • ctrl: 是设备配置
  • frameProcess:是在每个新帧调用我的函数回调
  • args:是来自 javascript 函数的参数。

每个新帧都会调用 C++ 回调,我想简单地打印一些类似“收到新帧”的内容,所以我的 C++ 就像:

void frameProcess(uvc_frame_t *frame, void *ptr) {
const FunctionCallbackInfo<Value> args = *((const FunctionCallbackInfo<Value>*)(ptr));
Isolate* isolate = args.GetIsolate();

Local<Function> cb = Local<Function>::Cast(args[0]);
const unsigned argc = 1;
Local<Value> argv[argc] = { String::NewFromUtf8(isolate, "new frame received") };
cb->Call(Null(isolate), argc, argv);

}

void testStreaming (const FunctionCallbackInfo<Value>& args) {
...
res = uvc_start_streaming(devh, &ctrl, frameProcess, (void *) &args, 0);
puts("Streaming...");
Sleep(10000); /* stream for 10 seconds */
uvc_stop_streaming(devh);
puts("Done streaming.");
...
}

...
NODE_SET_METHOD(exports, "testStreaming", testDevice);

我的 js 是这样的:

'use strict';
var uvc = require('../build/Release/binding')
uvc.testStreaming(
function (x) {
console.log(x)
}
)

问题是当程序到达 cb->Call 时, Node 退出时没有任何消息或错误。

如果我评论 cb->Call row 程序按程序运行 10 秒(连续调用 )然后退出。

但是如果我取消注释 cb->立即调用程序退出。

最佳答案

您的 frameProcess() 函数应该在 Node.js 线程中调用 v8::Function 回调,参见 https://stackoverflow.com/a/28116160/1355844

关于javascript - 在 native Node 的回调中调用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46914670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com