我有一个使用DLL进行实时通信的GUI。为了使DLL能够将未经请求的信息传递给GUI,在初始化时将指向通知对象的指针传递给DLL。这很好,除了现在我需要这个通知对象来触发主线程中的GUI更新(通知指针可以从DLL生成的几个线程中使用)。我正在通过让通知对象通过SendNotifyMessage()向GUI线程发出信号来尝试此操作。一切似乎都很好,除了消息似乎永远不会到达GUI线程......
抱歉没有可用的实际代码(我目前不在同一台PC上),但为了说明:
//Main GUI thread:
pNotifier->hWnd = this->GetSafeHwnd();
InitDll(pNotifier);
//DLL (in a locally spawned thread):
pNotifier->TriggerGUIEvent(x);
//Back in GUI code (but now in a different thread):
void notifier::TriggerGUIEvent(int x)
{
//This returns non-zero (success).
::SendNotifyMessage(hWnd, WM_MY_MESSAGE, x, NULL);
}
//Back in the main GUI thread:
ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)
LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)
{
//Break point here never gets hit???
}
顺便说一句,这是C ++ / MFC。 DLL本身只是C ++。
我已经完成了一些Windows编程工作,但这并不是我的强项。有谁知道我在这里缺少什么?对SendNotifyMessage()的调用是否源自在DLL边界的另一侧创建的另一个线程,以某种方式使消息或窗口句柄无效?
感谢。