使Node.js退出,而不考虑挂起的本机模块异步调用
我正在为Node.js编写一个基于的模块 该模块使用WINAPI使Node.js退出,而不考虑挂起的本机模块异步调用,node.js,node.js-addon,Node.js,Node.js Addon,我正在为Node.js编写一个基于的模块 该模块使用WINAPIWaitForSingleObject(pid)。阻塞WINAPI调用包装在Napi::AsyncWorker中 问题 异步调用阻止Node.js退出。我希望Node.js在无事可做时退出,就像它在child\u process.unref()中所做的那样。因此,我想取消Node.js事件循环中的异步调用。我没有时间对其进行NPM包,但下面是我的解决方案。该解决方案适用于所有阻塞系统调用(将调用线程置于等待状态,如Sleep()do
WaitForSingleObject(pid)
。阻塞WINAPI调用包装在Napi::AsyncWorker
中
问题
异步调用阻止Node.js退出。我希望Node.js在无事可做时退出,就像它在
child\u process.unref()中所做的那样。因此,我想取消Node.js事件循环中的异步调用。我没有时间对其进行NPM包,但下面是我的解决方案。该解决方案适用于所有阻塞系统调用(将调用线程置于等待状态,如Sleep()
does)
其想法是:
用于阻塞WINAPI调用
用于从新线程安全地回调Javascript
用于从Node.js事件循环中取消异步操作
更多详情:
为了安全地同时调用,请使用线程特定的数据创建一个新的void*上下文
,并传递它(由N-API支持)
对于未修复的napi_threadsafe_函数
,支持终结器。在此处停止等待线程,以防止Node.js退出时出现崩溃消息
我使用C语言和C++语言互换。不幸的是,在编写时,不可能有一个纯粹的C++解决方案,因为<代码> NAPIONUNRIFTHEADHealthFuffy只能从C API获得。
addon.cc:
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
使用名称空间Napi;
构造我的上下文{
std::thread nativeThread;
处理HSTOP事件;
napi_线程安全功能tsfn;
};
std::string WaitForPid(int-pid,my_-context*context,bool*stopped){
HANDLE process=OpenProcess(同步、假、pid);
if(进程==NULL)
{
std::stringstream;
stream我没有时间对它进行NPM包,但这是我的解决方案。该解决方案对所有阻塞系统调用都有效(这会使调用线程处于等待状态,如Sleep()
does)
其想法是:
用于阻塞WINAPI调用
用于从新线程安全地回调Javascript
用于从Node.js事件循环中取消异步操作
更多详情:
为了安全地同时调用,请使用线程特定的数据创建一个新的void*上下文
,并传递它(由N-API支持)
对于未修复的napi_threadsafe_函数
,支持终结器。在此处停止等待线程,以防止Node.js退出时出现崩溃消息
<> Li > C和C++交替使用,遗憾的是,C++编写的解决方案在编写时是不可能的,因为<代码> NAPIUN unReFuthTeaSturyFuffy<代码>只能从C API获得。
addon.cc:
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
使用名称空间Napi;
构造我的上下文{
std::thread nativeThread;
处理HSTOP事件;
napi_线程安全功能tsfn;
};
std::string WaitForPid(int-pid,my_-context*context,bool*stopped){
HANDLE process=OpenProcess(同步、假、pid);
if(进程==NULL)
{
std::stringstream;
流动