0
저는 노드입니다 & C++ 초보자 만 사용할 수 있습니다.네이티브 노드에서 콜백 콜백 콜백
기본 노드 애드온을 쓰고 있습니다.
내 addon은 (UVC lib를 사용하여) 스트리밍 웹캠을 시작하고 모든 프레임을 노드에서 사용할 수있게하려고합니다.
- devh가 :
내 CC의 부가
는uvc_start_streaming(devh, &ctrl, frameProcess, (void *) &args, 0)
과 같이 수행 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에 도달 할 때 메시지 나 오류없이 노드가 종료된다는 것입니다.
내가 cb-> Call row에 댓글을 달면 프로그램이 10 초 동안 (연속적으로 전화를 걸어) 프로그램 된대로 실행 한 다음 종료합니다.
하지만 cb-> 프로그램 종료를 immediatly로 부릅니다.
귀하의frameProcess()
기능은 Node.js를 스레드에서
v8::Function
콜백을 호출해야