在 Windows nodejs 插件中,我创建了一个用于接收消息的窗口。
Handle<Value> MakeMessageWindow(const Arguments &args) { // exposed to JS
...
CreateWindow(L"ClassName", NULL, 0, 0, 0, 0, 0, HWND_MESSAGE, 0, 0, 0);
...
}
我有一个 wndproc 函数。
Local<Function> wndProc;
LRESULT APIENTRY WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
// pack up the arguments into Local<Value> argv
wndProc->Call(Context::GetCurrent()->Global(), 3, argv);
}
现在我需要发送消息。通常,你会做类似的事情
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
...但这不起作用,因为它只会阻止 v8 事件循环。
如何以不会阻止 v8 并允许我在窗口接收消息时调用 JS 函数的方式发送 Windows 消息?
我认为 libuv 将发挥作用,但我不确定如何安全地从在单独线程上运行的 C 调用 JS 函数,特别是因为uv_async_send
不能保证每次调用它时都会调用回调,我需要确保每次收到窗口消息时都会调用我的 JS 回调。