首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-addon-api如何在JS和C/C++之间来回传递int指针

node-addon-api如何在JS和C/C++之间来回传递int指针
EN

Stack Overflow用户
提问于 2021-07-23 05:02:05
回答 1查看 33关注 0票数 0

我有以下后端函数:

代码语言:javascript
复制
// foo.c

void cStart(pid_t* pid)
{
  *pid = getpid();

  // event-loop keep running until receive SIGINT signal
}

void cStop(pid_t* pid)
{
  kill(*pid, SIGINT);
}
代码语言:javascript
复制
// addon.cpp

#include "addon.h"
#include "foo.h"

Napi::Number addon::run_pipeline_wrapped(const Napi::CallbackInfo &info)
{
  Napi::Env env = info.Env();

  // get the buffer from JS, pass it to cStart to be modified in-place [?]
  cStart(pid_t* pid);
}

Napi::Number addon::kill_pipeline_wrapped(const Napi::CallbackInfo &info)
{ 
  Napi::Env env = info.Env();

  // get the modified (by cStart) buffer from JS, pass it to cStop [?]
  cStop(pid_t* pid);
}

在前端,当单击start按钮时,C进程将开始运行,直到它接收到SIGINT信号;当单击stop按钮时,SIGINT信号被发送到正在运行的C进程。int*将按如下方式运行: JS (单击开始按钮) -> C/C++ (cStart修改了int*,因此int*不会显式返回给JS) -> JS (单击停止按钮) -> C/C++)。那么如何在JS和C/C++之间来回传递int指针呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-23 05:53:12

您不必将指针传递给JS。

您可以改用全局状态:

代码语言:javascript
复制
// foo.c

pid_t* my_pid;

void cStart(void)
{
  my_pid = getpid(); // save the pid

  // event-loop keep running until receive SIGINT signal
}

void cStop(void)
{
  // kill the process from earlier
  kill(*my_pid, SIGINT);
}

请注意,这假设您只有一个,它在调用cStart和调用cEnd之间不会被其他任何东西改变。因此,在cEnd中,它应该杀死与单击start按钮的进程相同的进程。

然后,您的C++代码将如下所示:

代码语言:javascript
复制
// addon.cpp

#include "addon.h"
#include "foo.h"

Napi::Number addon::run_pipeline_wrapped(const Napi::CallbackInfo &info)
{
  Napi::Env env = info.Env();
  cStart();
}

Napi::Number addon::kill_pipeline_wrapped(const Napi::CallbackInfo &info)
{ 
  Napi::Env env = info.Env();
  cStop();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68491463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档