• 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 > COM组件事件返回值的显示刷新问题

COM组件事件返回值的显示刷新问题

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

佚名通过本文主要向大家介绍了com组件,com组件是什么,com组件下载,com组件注册,com组件编程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: COM组件事件返回值的显示刷新问题
描述:

用VC写了一个COM组件,在另一个VC建的Dialog Base的MFC程序中调用。
COM组件可以通过事件将进度信息和当时的运算数据返回Dialog Base的MFC程序中,
我想在事件响应中想把获得的进度显示在该窗体中,可是该窗体却只有等到COM组件运行结束后才会刷新显示的内容,在COM组件运行时界面呈假死机状态。
请问怎么做才能实时的现实刷新窗体呢?
求实例代码!急,谢谢!


解决方案1:

我认为这样也不能很好地刷新界面:
主线程里
//GetMessage
MSG msg;
GetMessage(&msg, 0, 0, 0);
//DispatchMessage
DispatchMessage(&msg);
GetMessage()函数是一个堵塞调用,一定要从消息队列读出一些消息才可以返回。
在计算线程里加入这一段话,计算即使不被卡死也得相当慢。
取消息和分发消息本来就是很耗时间的事情。
最好还是开个计算线程吧,那样会好些。
在计算线程里直接改变主界面进度,而不用
GetMessage()和DispatchMessage()。

解决方案2:

原因:
主线程在运行for循环 Fire_SetProgress(i);时,COM把它挂起;COM在自己线程池里使用一个线程做事件回调,也即UpdateData(FALSE);是在这个线程调用的。另外,界面是由主线程维护的,但此时主线程阻塞(尽管此时UpdateData的消息已经发到该窗体),因此界面不能更新。
能显示最后的更新状态,是因为主线程退出for后,根据m_iProgress最后的值和消息队列里的更新消息来更新的。
用jiangsheng(蒋晟.MSMVP2004Jan)的方法可以解决:
for (i=1;i<RecordCount;i++)
{
//计算
Fire_SetProgress(i);
//GetMessage
MSG msg;
GetMessage(&msg, 0, 0, 0);
//DispatchMessage
DispatchMessage(&msg);
}
可能更好的方法是,新开一个线程去调用for循环,而不是用主线程。这样可以直接用你原来的代码

解决方案3:

在运算过程中分发一下消息吧
for (i=1;i<RecordCount;i++)
{
     //计算
     Fire_SetProgress(i);
     //GetMessage
     
     //DispatchMessage
}


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

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

  • COM组件的变量问题?
  • DLL中对进程外的ActiveX/COM组件(EXE形式)的对象实例化问题,DLL内不支持调进程外COM??
  • 怎样将原来不支持COM的mfc类,成为com类
  • MFC实现COM的接口映射的问题。请教高手。急。。
  • COM+组件的注册问题?
  • 关于COM组件的问题
  • com组件全局变量问题
  • COM组件和主程序之间的数据传输问题??
  • MFC中添加服务器组件的注册问题。
  • Com组件使用Recordset的游标问题

相关文章

  • 2017-06-04 在MFC的ActiveX里面加了一个Dialog,想获得ActiveX的属性,新加接口,还是直接可以访问?
  • 2017-06-04 不依赖扩展名,如何在vc中判断一个文件的格式
  • 2017-06-04 为什么这三句话编译总会出错
  • 2017-06-05 大家看看MsgWaitForMultipleObjects这样写可有问题
  • 2017-06-05 高手看看这段代码为什么不能结束进程?
  • 2017-06-04 请问dcom对客户响应的方式
  • 2017-06-05 线程同步的问题,急阿!
  • 2017-06-05 有没有关于VC++方面经典的教材啊?
  • 2017-06-04 一个有关ATL/COM连接数据库的问题:
  • 2017-06-05 高手_VC能写出同时给VC,VB,BCB,DELPHI等其它语言调用的DLL吗一个DLL文件?

文章分类

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

最近更新的内容

    • 使用DOM时,怎样能使表单元素的cnclick事件发生,怎样使select元素的onchange事件发生?
    • aboutdll'srebase
    • firefoxplugin用DirectInput崩溃
    • 请大家看看,我要做个通信协议的ATL,该怎样新建和配置项目,问题若干~
    • 用一个程序的两个运行备份进程间如何通信?
    • 在程序A中想获取当前正拥有输入焦点的记事本程序中的RichEdit控件的句柄,该怎么办?
    • 一个游戏的问题
    • VC的MSCOMM控件读取GSM模块短信
    • 怎么动态改变控件的大小?
    • 请教PROCESS_LOCALCOccManager,_afxOccManager这里new出来的COccManager是在什么地方删除的啊????

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

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