在C ++的UI线程中需要帮助

时间:2011-02-12 16:20:21

标签: c++ winapi user-interface

我正在使用UI线程,并且我使用消息映射构建了一个线程并且它工作正常,问题是当我要从第一个创建另一个线程时。

当我到达这一行时:

this->PostThreadMessage(WM_MYTHREADMESSAGE,0,0);

我收到了下一条消息:

  

“没有为任何调用堆栈帧加载符号。无法显示源代码”

我不知道它是否可能是问题的原因,但我已经构建了两个消息映射,每个线程一个,我不知道是否可以这样做。

2 个答案:

答案 0 :(得分:3)

这个问题很难理解。我假设您在调试器中单步调试程序,然后进入PostThreadMessage行。

如果选择Step Into,调试器将尝试进入PostThreadMessage调用(或框架包装器,具体取决于this的类型)。由于PostThreadMessage是系统调用,因此您可能没有该代码的符号。调试器只显示反汇编。您可以尝试使用Microsoft符号服务器,但我没有看到尝试跟踪PostThreadMessage的重点。如果参数正确,它将把消息发布到指定线程的队列。在那里看不多。

向其他线程发布消息是一件棘手的事情。大多数Windows程序,甚至是多线程程序,通常会将所有UI工作保留在一个线程中。它可以做到,但有很多警告,通常不值得痛苦。

答案 1 :(得分:2)

所以有几件事情:

  1. 如果要从工作线程通知UI线程,则不应使用PostThreadMessagehere is why
  2. 当在线程A的成员函数中调用this->PostThreadMessage(...)时,消息将被发送到线程A,因为this指向A的CWinThread。您必须获得指向另一个向其发帖子的帖子。
  3. 最后,如果要通知UI线程,请使用PostMessage将消息发送到该线程创建的窗口。将相应的处理程序添加到窗口消息映射中。
  4. 希望这有帮助