微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有以下后端功能

// 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);
}
// 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);
}

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

解决方法

您不必将指针传递给 JS。

您可以改用全局状态:

raise HTTPError(req.full_url,code,msg,hdrs,fp)
urllib.error.HTTPError: HTTP Error 404: Not Found

请注意,但是这假设您只有一个在调用 // 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 按钮的同一进程。

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

start

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。