CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

套间问题!

楼主lvxn_sina(XN)2006-06-03 22:22:32 在 VC/MFC / ATL/ActiveX/COM 提问

STA套间说明为接口会自动进行同步,本人做了以下测试却不能同步,请大家指教!!!  
   
  DWORD   WINAPI   ThreadProc(void*   p)  
  {  
    CoInitialize(NULL);  
    ITest   *pv   =   (ITest*)p;  
    pv->Test(...);  
    ...  
  }  
   
  Test1()  
  {  
  ...  
    CoInitialize(NULL);  
   
    ITest   *pv;  
    CoCreateInstance(...,   (void**)pv);  
    CreateThread(NULL,   0,   ThreadProc,   pv,   0,   &dwThreadId);  
    pv->Test(...);  
   
    ...  
  }  
   
   
  在接口的方法中,等待两次调用成功  
  HRESULT   Test(...)  
  {  
    static   int   cnt   =   0;  
    if   (cnt   !=   0)  
    {  
        _asm xor   eax,   eax                         //<==   在此设断点成功,说明接口调用并未进行同步  
        cnt++;  
    }  
    else  
    {  
      cnt++;  
      while   (cnt   ==   1)   Sleep(2);  
    }  
  ...  
    cnt--;  
  }  
   
  套间到底为什么东东啊?既然未对接口同步,存在套间有什么意义呢?  
  问题点数:100、回复次数:4Top

1 楼wzh0591(企鹅)回复于 2006-06-03 22:26:43 得分 0

MARK  
  Top

2 楼Analyst()回复于 2006-06-04 18:18:29 得分 0

你这样传递接口是错误的,不能直接把接口从一个套间传到另一个套件。先要把接口marshal到一个stream里去,再传递给另一个线程,然后unmarshal出接口来,具体用什么API请自行查阅MSDN。还有一个要点,你的STA套间线程一定要运行windows消息循环,否则另一个线程的对象的方法不可能被执行。Top

3 楼lxpws(你被耍了)回复于 2006-06-05 09:48:56 得分 0

如楼上,访问同步的基础是跨套间传递接口时要将其marshal,这个规则需要COM和用户共同遵循。Top

4 楼XXandOO(麦猪)回复于 2006-06-05 15:36:30 得分 0

组件的套间类型如果是Apartment,则组件只会在STA中激活,STA会与进入该套间的线程(也就是执行CoInitialize的线程)相关,所以接口函数自然会是同步调用的。Top

相关问题

关键词

得分解答快速导航

  • 帖主:lvxn_sina

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo