我需要提交代码才能在消息抽取的线程中运行,没有定义多个自定义消息。
像Java SwingUtilities.invokeLater()
之类的东西(注意:我已经有一个允许lambda可回调的实用程序)
我已经尝试了::SendMessageCallback & SendAsyncProc
,但是当调用::GetMessage
时,相同的发送方线程会调用回调(这是该API的要求......)
ATM我的另一种选择是定义一个传递回调的自定义消息(即WM_USER_EXECUTE),但是这需要准备好接收该消息的所有目标!
我更喜欢更通用的方式。
答案 0 :(得分:1)
使用对MsgWaitForMultipleObjectsEx()API的调用替换GetMessage调用。这是很多打字,但它应该工作......
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684245%28v=vs.85%29.aspx
答案 1 :(得分:1)
最后,我找到了一种方法来获得我需要的东西,所以我将解决方案留给其他人。
RegisterWindowMessage()
获取安全消息ID(可能是偏执狂,但机制对目标来说完全是透明的。)GetWindowThreadProcessId
::SetWindowsHookEx
参数化为WH_CALLWNDPROC
SendMessage
传递特殊的MSG id和包含要执行的代码的例程的指针来触发整个事件所有东西都可以封装在一个函数中并用作invokeOnWndProc(HWND,lambda_Callback)
PROS:代码在UI线程中运行,完全透明,同步行为!
缺点:相当重量级..