最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解nodejs addon實(shí)現(xiàn)回調(diào)函數(shù)事件

 更新時間:2026年02月08日 15:29:53   作者:Aaron_1127  
本文介紹了一個Node.js addon的實(shí)現(xiàn),通過封裝異步回調(diào)接口,使用libuv和nan模塊處理從C++到JavaScript的回調(diào),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

封裝nodejs的addon接口,在處理回調(diào)函數(shù)這塊走了很多彎路,在此提供一個簡單的測試程序,有興趣的可以研究下。

安裝nan模塊

npm install nan

binding.gyp文件內(nèi)容如下:

{
    'targets': [
    {
        "target_name": "bjcast_project_addon", 
        "sources": ["./bjcast_project_addon.cc"],
        
        "include_dirs": [
            "<!(node -e \"require('nan')\")",
        ],            
    }
    ]  
}

bjcast_project_addon.cc內(nèi)容如下:

#include <iostream>
#include <string>

#include <v8.h>
#include <nan.h>
#include<windows.h>
using namespace v8;

struct OnStartSessionData {
  Nan::Callback *callback;    //回調(diào)函數(shù)
  int reason;                 //需要回調(diào)到j(luò)s層的數(shù)據(jù)
  uv_async_t handle;          //異步句柄
};

OnStartSessionData *on_start_session_data = new OnStartSessionData();

static void OnBJCastStartSession(const int reason) {    
  on_start_session_data->reason = reason;
  on_start_session_data->handle.data = (void *)on_start_session_data; //數(shù)據(jù)類型的一些轉(zhuǎn)換
  uv_async_send(&on_start_session_data->handle);                      //喚醒事件循環(huán)中的事件  
}

void OnStartSessionEvent(uv_async_t *handle) {                  //具體執(zhí)行的事件
  Nan::HandleScope scope;
  OnStartSessionData *data = (OnStartSessionData *)handle->data;
  v8::Local<v8::Value> argv[1] = {Nan::New((int)data->reason)};//數(shù)據(jù)類型的一些轉(zhuǎn)換
  data->callback->Call(1, argv);                               //數(shù)據(jù)回調(diào)到j(luò)s層
}

NAN_METHOD(bjcast_session) {
  Local<String> ip_value = Local<String>::Cast(info[0]);
  String::Utf8Value ip(ip_value);
  std::string ip_str = std::string(*ip);

  Local<Number> port_value = Local<Number>::Cast(info[1]);
  double port = port_value->NumberValue();

  Local<String> pin_value = Local<String>::Cast(info[2]);
  String::Utf8Value pin(pin_value);
  std::string pin_str = std::string(*pin);

  Nan::Callback *start_session_callback = new Nan::Callback(info[3].As<Function>());
   
  on_start_session_data->callback = start_session_callback;  //獲取回調(diào)函數(shù) 
  uv_async_init(uv_default_loop(), &on_start_session_data->handle,OnStartSessionEvent);  //加入事件循環(huán)中,等待喚醒,uv_default_loop()獲取libuv默認(rèn)創(chuàng)建的事件循環(huán)句柄

//   int32_t value = BJCastProjectLib::GetInstance().StartBJCastSession(
//       ip_str.c_str(), (uint16_t)port, pin_str.c_str(),start_session_callback);
  
  int value = 0;
  Local<Value> argv[1] = {Nan::New((int)value)};
  info.GetReturnValue().Set(Nan::New((int)value));

  OnBJCastStartSession(5);   
}


NAN_MODULE_INIT(init) {
  Nan::Export(target, "startBJCastSession", bjcast_session);
}

NODE_MODULE(bjcast_project_addon_win, init)

index.js的內(nèi)容如下:

var BJLib = require('./build/Release/bjcast_project_addon.node');

var serverIp = '192.168.9.155';
var serverPort = 8188;
var pin = '';


onStartSessionResult =function(result) {  
  console.log('result =  ', result);
}

var ret_value = BJLib.startBJCastSession(
    serverIp, serverPort, pin, onStartSessionResult);  

console.log(ret_value);

運(yùn)行

node index.js
0
result =   5

到此這篇關(guān)于詳解nodejs addon實(shí)現(xiàn)回調(diào)函數(shù)事件的文章就介紹到這了,更多相關(guān)nodejs addon 回調(diào)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

黄大仙区| 阳曲县| 彭阳县| 彰武县| 曲靖市| 靖宇县| 凉山| 绵竹市| 塔河县| 台中县| 高安市| 康平县| 台中县| 临汾市| 邵武市| 高青县| 文化| 霍林郭勒市| 清河县| 防城港市| 咸阳市| 渭南市| 武胜县| 宜兰县| 昌江| 刚察县| 山西省| 阿克陶县| 深圳市| 自治县| 资溪县| 清徐县| 南安市| 库尔勒市| 天等县| 大埔区| 上栗县| 孟连| 神木县| 舟山市| 贵德县|