按照nodejs官网的demo编写了一个c++扩展用,发现扩展在工作的时候js代码都是处于阻塞状态的。
想到了新创建一个线程执行工作任务,工作线程执行完毕后再去回调js函数。写完之后发现,工作线程一但回调js函数整个应用就会闪退,原来js函数只能在一个线程中调用。
- 转换思路,工作线程工作完毕之后通知主线程调用js的回调函数,结合以前Windows开发的经验想到了PostThreadMessage 和 SetSetWindowsHookEx,工作线程执行好任务之后给主线程发送个消息,主线程用SetSetWindowsHookEx拦截消息之后回调目标函数,折腾了几个小时没有成功,不过思路应该是没错的。
- 又百度了下发现v8头文件已经封装了一个uv_queue_work来进行多线程异步操作:
uv_queue_work(uv_default_loop(),new uv_work_t(),【工作线程】,【主线程回调】);