我正在为Node.js编写基于Napi的模块。
该模块使用WINAPI WaitForSingleObject(pid)
。阻塞的WINAPI调用包装在Napi::AsyncWorker
中。
异步调用可防止Node.js退出。我希望Node.js在无事可做时退出,就像child_process.unref()
一样。因此,我想取消引用Node.js事件循环中的异步调用。
我没有时间制作NPM软件包,但这是我的解决方案。该解决方案对所有阻塞的系统调用均有效(将调用线程置于等待状态,如Sleep()
一样。)>
想法是:
std::thread
阻止WINAPI调用。std::thread
从新线程安全地回调到Javascript。napi_threadsafe_function
从Node.js事件循环中取消引用异步操作。更多详细信息:
napi_threadsafe_function
并进行传递(由N-API支持)。>>napi_unref_threadsafe_function
,支持终结器。在此处停止等待的线程以防止Node.js退出时出现崩溃消息。napi_unref_threadsafe_function
和C ++ void* context
。不幸的是,在撰写本文时,纯C ++解决方案是不可能的,因为napi_threadsafe_function
仅可从C API获得。addon.cc:
N-API