使Node.js退出,而不考虑挂起的本机模块异步调用

使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

我正在为Node.js编写一个基于的模块

该模块使用WINAPI
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;
    流动