【发布时间】:2013-07-18 04:53:20
【问题描述】:
在 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 is not guaranteed to invoke a callback every time you call it 之后,我需要确保每次调用我的 JS 回调收到窗口消息的时间。
【问题讨论】:
标签: c++ node.js winapi v8 libuv