В аддон Windows nodejs я создал окно с целью получения сообщений.Как перекачать сообщения окна в аддон 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 событий.
Как перекачать сообщения Windows способом, который не будет блокировать v8, и позволяет мне вызывать функцию JS, когда мое окно получает сообщения?
Я предполагаю, что libuv будет играть определенную роль, но я точно не знаю, как безопасно вызывать функцию JS из C, работающую на отдельном потоке, особенно с uv_async_send
is not guaranteed to invoke a callback every time you call it, и мне нужно обеспечить, чтобы каждый раз вызывался JS-обратный вызов появляется оконное сообщение.
Отличная информация. У вас, случайно, есть модуль репо или узел, который это выполняет? Я хочу сделать то же самое. – Charlie
Был ли ваш подход работать? У меня возникли проблемы с передачей функции обратного вызова в uv_async_send, после вызова функции uv_thread_create, я не могу получить функцию обратного вызова. Даже постоянные ручки не работают - я тоже разместил этот вопрос в SO.http: //stackoverflow.com/questions/31159029/how-to-use-persistent-handles-for-callback-functions-in-v8 – opensourcegeek
Есть ли у вас или знаете код репо, использующий этот метод? Это именно тот подход, который я принимаю. – Niall