• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 请lop5712LOP兄弟进来拿分

请lop5712LOP兄弟进来拿分

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了兄弟进来喝口水,兄弟进来喝杯水,走出去请进来,请进来走出去培训,请进来等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 请lop5712LOP兄弟进来拿分
描述:

Lop5217辛苦了,希望今后能向你请教
To csdn众捕头及斑竹,详见帖子
http://expert.csdn.net/Expert/topic/2996/2996499.xml?temp=.8085749


解决方案1:

对于楼主原帖中的第一个问题,正如楼主所说,“因为pInst接口所属控件处在主线程套间”。因为pInst实际是指向代理对象的指针,而当pInst->StartWorkThread();时,实际调用代理对象实现的IDEventTest。
    如果是在STA套间中发起上面的调用,为了保障STA的线程规则,其向主线程中的隐藏窗口发送一个消息,但是是Post而并非Send,然后其进入一个COM模式循环。而所谓的COM模式循环,实际就是一个消息循环,不同的是此循环在检测到消息后,根据消息的种类(是发给隐藏窗口的消息还是一般普通消息)调用和此线程绑定的一个COM对象,此对象实现IMessageFilter以保证此线程(即工作者线程)中的STA组件对象不会因为等待另一个同步调用的返回而不能做出反应。
    如果是在MTA套间中发起,则只是简单的MsgWaitForMultiObjects以表现出是同步调用(因为逻辑上规定STA中的对象的代码只能由此STA相关的线程执行)。
    对于第二个问题,抱歉那个代码已经没有了,我记不到ThreadFunction里是什么代码了,不过不管是什么。因为是直接通过类的成员函数调用这种访问方式,即ThreadFunction不是一个虚函数进而函数地址是编译时期就定好了,且pInstance是一个类对象的指针,没有通过汇集操作,编译时就被编译成直接调用那个成员函数。也就是说前面的什么发送消息、进入模式循环等都是代理对象的代码导致的,而此处没有代理对象,故执行循环的是工作者线程而并非原来的主界面线程。
    而pInstance是一个CEventTestCtrl*,重点就是它是从CWnd派生来的,语义上是界面包装类。对于MFC提供的界面包装类,由于特殊的原因,其是线程相关的,不能像楼主原来那样线程间直接传递类对象的指针,故而导致“FireEvent及一些界面更新类的函数如UpdateWindow”的调用出错,实际出错的并不是这些函数,而是其内部的ASSERT_VALID( this );断言宏。对于此,我专门写了一篇文章说明原因,楼主有兴趣可以参考:
http://www.csdn.net/Develop/read_article.asp?id=26152


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 请lop5712LOP兄弟进来拿分

相关文章

  • 2017-06-05 有关用VC修改VB程序图标并在桌面开始菜单中显示的问题
  • 2017-06-04 在VC6中的ATLDLL工程中出现如下错误,是怎么回事呀?
  • 2017-06-04 菜鸟求助:用ATL如何生成一个OCX文件?
  • 2017-06-04 位图的格式是什么样的,怎么样自己画一幅位图呢
  • 2017-06-04 ACTIVEX安装问题!!!已经显示安装提示了!
  • 2017-06-05 急急问线程结束问题——详见代码!
  • 2017-06-05 请教线程中控制鼠标的问题
  • 2017-06-05 HTML调用本地OCX如何使得IE没有安全警告
  • 2017-06-04 如何更好地在程序里控制OFFICE文档,OFFICE文档容器插件V13
  • 2017-06-04 SOLIDWORKS方程式变量赋值

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 高分求助。。。
    • 如何让一个程序只运行n次,比如说3次?
    • 无法输入汉字
    • 关于COM调用后自动销毁的问题?
    • 串口未连外设,应怎么返回它的值?
    • 高手过来看看,高难度
    • 在ATL设计的控件上如何处理MSComm控件?
    • vb调用vc编写activex控件,传入字符数组问题
    • IE浏览器中的2个ActiveX控件如何交互?
    • 怎么给智能指针直接赋值?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有