2017-10-24 7 views
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 콜백을 호출해야

답변