程序是MFC SDI结构,在View类里自定义了一个消息响应函数,然后在另外一个worker thread中用::SendMessage()发送该消息。
在DEBUG版本中,程序运行正常,但是在Release版本(已关闭优化)中程序异常。跟踪后发现在消息响应函数执行完之后,View类里的所有成员变量(不管什么类型)值都被置为了 0 ,(导致接下来有些用到成员变量的函数不能正常运行),而在DEBUG版本中,成员变量值能保持不变。刚开始怀疑是不是有内存越界访问,但是察看View类对象对应的内存区,发现只有成员变量的区域被填充了 0 ,而前后的其它区域内存值不变。
想请教大侠们,这到底是怎么回事呢?多谢啦!

解决方案 »

  1.   

    多线程最好不要用SendMessage,会产生强制同步
      

  2.   

    那怎么处理呢?改用PostMessage()也不行啊。
      

  3.   

    谢谢大家,问题解决了。
    一个很低级的错误:因为没有用到消息响应函数的WPARAM、LPARAM两个入口参数,所以我定义的时候图方便就没写参数列表。加上后就运行OK了。
    不过还是不明白,DEBUG和Release版本各自是怎么对待这种情况的?为什么DEBUG版本能正常运行而Release版本出错了。还请大家指教,谢谢啦!