2011-02-12 73 views
0

我使用的UI线程,我建立了一个线程与消息映射,它工作正常,问题是当我想从第一个创建另一个线程。需要在C++的UI线程帮助

当我得到这一行:

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

我发现了下一个消息:

“否符号已加载的任何调用堆栈帧中的源代码是不可能的。显示“

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

+0

什么编译您使用的?你在使用IDE吗? – 2011-02-12 16:22:25

回答

3

这个问题很难理解。我假设你在调试器中逐步完成了你的程序,并且你得到那个PostThreadMessage行。

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

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

2

因此,有几件事情:

  1. ,如果你想从通知工作者线程UI线程,那么你不应该使用PostThreadMessagehere is why
  2. this->PostThreadMessage(...)在线程A的成员函数中调用时,由于this指向A的CWinThread,因此该消息将被发送到线程A.您必须获取指向其他线程的指针才能向其发送消息。
  3. 最后,如果您想通知您的UI线程,请使用PostMessage向该线程创建的窗口发送消息。为窗口消息映射添加相应的处理程序。

希望这有助于