我正在使用UI线程,并且我使用消息映射构建了一个线程并且它工作正常,问题是当我要从第一个创建另一个线程时。
当我到达这一行时:
this->PostThreadMessage(WM_MYTHREADMESSAGE,0,0);
我收到了下一条消息:
“没有为任何调用堆栈帧加载符号。无法显示源代码”
我不知道它是否可能是问题的原因,但我已经构建了两个消息映射,每个线程一个,我不知道是否可以这样做。
答案 0 :(得分:3)
这个问题很难理解。我假设您在调试器中单步调试程序,然后进入PostThreadMessage
行。
如果选择Step Into,调试器将尝试进入PostThreadMessage
调用(或框架包装器,具体取决于this
的类型)。由于PostThreadMessage
是系统调用,因此您可能没有该代码的符号。调试器只显示反汇编。您可以尝试使用Microsoft符号服务器,但我没有看到尝试跟踪PostThreadMessage
的重点。如果参数正确,它将把消息发布到指定线程的队列。在那里看不多。
向其他线程发布消息是一件棘手的事情。大多数Windows程序,甚至是多线程程序,通常会将所有UI工作保留在一个线程中。它可以做到,但有很多警告,通常不值得痛苦。
答案 1 :(得分:2)
所以有几件事情:
PostThreadMessage
,here is why。this->PostThreadMessage(...)
时,消息将被发送到线程A,因为this
指向A的CWinThread
。您必须获得指向另一个向其发帖子的帖子。PostMessage
将消息发送到该线程创建的窗口。将相应的处理程序添加到窗口消息映射中。希望这有帮助