• 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组件同步的问题]
描述:

CA组件(Apartment)实现了IA接口,同时CA内部创建了一个CB组件,CB组件实现了IB接口,该接口指针保存在CA组件的IB *pIB类变量中。 

/*CA.h 头文件*/
IB *pIB;//包容的IC接口
UINT m_nValue;//类变量
static DWORD WINAPI threadProc(LPVOID);//工作线程
/*CA.cpp 实现*/
STDMETHOD CA::IA_Method1()
{
    m_nValue = 1;//这里要加Lock吗?
}
STDMETHOD CA::IA_Method2()
{
    CreateThread(NULL,0,threadProc,this,0,NULL);
    return S_OK;
}
DWORD CA::threadProc(LPVOID pVoid)
{
    CA *pCA = (CA*)pVoid;
    pCA->pIB->Method1();//这里能直接调用pIC的函数吗?
    pCA->m_nValue = 2;//这里要加Lock吗?
    return 0;
}

pCA->pIB->IB_Method1();这一行代码有问题吗?我传给工作线程的参数是IA实现组件CA类的this指针。 
还有个问题就是,如果在threadProc中有可能修改到CA类的类变量,而这些类变量也有可能在IA的接口函数里被访问,那么在修改的时候是否需要加锁?
另外还有一个问题,在此一起请教:
一个COM组件(名为HD)需要通过串口控制一个硬件设备,所有的控制操作均需要通过串口指令进行。
因为串口只能打开一次,所以该COM组件一旦有一个实例调用了打开串口的指令,其它的实例就不能再打开串口了。这也就意味着只能有一个HD的实例能操作硬件,不能两个实例并行控制。
现在有这么个需求,需要在Web页面A里通过HD对硬件进行一些操作,同时在Web页面B里也要通过HD对该硬件进行一些操作,应该怎么设计?


解决方案1:

要么移到外面,做成进程外组件..各个页面都与它通信...这样就只有一个实例

解决方案2:

第二个问题,把组件HD设计成SINGLETON模式。在组件实现类定义里加一个下面的语句:
DECLARE_CLASSFACTORY_SINGLETON(HD)

解决方案3:

pCA->pIB->Method1(); // 绝对不能这样调用
pCA->m_nValue = 2; // 如果只是改变一个简单的值,就需要进行同步,选定一种同步方式,封装一个方法来设置,例如:
void CA::SetValue(UINT nValue)
{
  Lock();
  m_nValue = nValue;
  Unlock();
}
读取变量的函数也得加锁。
这样搞其实搞复杂了,最好还是列集一下指针,在工作线程中获得的代理指针可以访问任何属性和方法,而且无需同步。


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

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

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

相关文章

  • 2017-06-04 请教ocx控件的制作
  • 2017-06-05 MFC串口使用几种波特率轮询嵌入式板
  • 2017-06-05 关于调用约定的问题?
  • 2017-06-05 关于从def生成dll文件过程中的问题!
  • 2017-06-04 为什么加两行代码,打开IE出现加载错误?
  • 2017-06-04 为什么我的ATL控件中的弹出菜单项处理函数不响应?
  • 2017-06-05 调用一个Com组件返回一块内存,如果不用IMalloc来释放,那么内存是否会泄漏?
  • 2017-06-05 Mutex的问题
  • 2017-06-04 请问vc++的程序和word连上,使程序能够查找替换word中的关键字,有什么函数,怎么用啊?
  • 2017-06-05 线程能否一直运行?

文章分类

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

最近更新的内容

    • 如何在ie客户区某个位置绘制自己需要的图形
    • VS2010中MFC怎么添加水晶报表控件
    • 如何根据clsid调用里面的方法activex使用
    • 消息不见了,真是气死人!
    • 在MAPX中如何移动图元即部件的位置
    • 一个关于创建进程的问题:
    • 控制台程序如何生成一个窗口?请高手指教。
    • TSF实现简单的输入法
    • 请教:装了一个宏狗开发包,之后VS2005编译不了
    • 如何获取拖拽文件的路径??

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

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