node-addon-api如何在JS和C/C++之间来回传递int指针
node-addon-api how to pass int pointer back and forth between JS and C/C++
我有以下后端函数:
// 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。
您可以改用全局状态:
// 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++ 代码将如下所示:
// 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();
}
我有以下后端函数:
// 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。
您可以改用全局状态:
// 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++ 代码将如下所示:
// 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();
}