线程中引发连接点事件的问题

pfans 2008-09-25 10:00:28
我在COM的线程A中引发连接点事件,然后在客户程序该事件中看线程ID,发现和客户程序的主线程ID是一样的,这说明事件是从主线程引发的,而不是线程A引发的。为什么?
我用dephi写同样的COM,这时事件的线程ID和主线程ID是不一样的,难道VC和dephi编写的com不一样吗?
...全文
158 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
UDX协议 2008-10-22
  • 打赏
  • 举报
回复
http://support.microsoft.com/kb/280512
yjgx007 2008-10-22
  • 打赏
  • 举报
回复
子线程只是负责创建连接点, 消息响应函数是在主线程中.
hbuzzd 2008-10-20
  • 打赏
  • 举报
回复
连接点的Fire事件本来就应该由服务端的主线程来引发。即便是你在子线程中调用了连接点事件,其实最主要的是你还必须把主线程this传递给子线程。
同时Fire事件此时还是不能通过编译,还必须修改FireEvent处的代码。class CProxy_IGuidanceEvents : public IConnectionPointImplMT
IConnectionPointImplMT是微软后来增加的专门处理多线程环境下调用连接点函数的相关处理。
jameshooo 2008-09-25
  • 打赏
  • 举报
回复
在哪个线程中Advise连接点,就在哪个线程中接收到事件。
蒋晟 2008-09-25
  • 打赏
  • 举报
回复
ATL的代码不是线程安全的
yxz_lp 2008-09-25
  • 打赏
  • 举报
回复
不知你代码是如何写的,你是把激发线程的ID传入事件源函数还是事件处理函数里获得线程ID,如果是后者,我认为应该是对的
,因为com组件里保存的是事件源接口的指针,而真正的事件源接口实例,是由客户端创建的,而com组件只不过是激发事件源调用它的方法,也就是说该方法是在创建事件源接口实例的线程中运行。(当然还要看是不是进程内组件)
dephi就不知道了。
pfans 2008-09-25
  • 打赏
  • 举报
回复
没有人知道吗?

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧