首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建由COM LocalServer实现的对象的实例将冻结。

创建由COM LocalServer实现的对象的实例将冻结。
EN

Stack Overflow用户
提问于 2013-08-17 11:11:45
回答 1查看 119关注 0票数 1

我创建了一个COM对象服务器exe,它实现了一个COM对象,并调用了CoRegisterClassObject,然后休眠了很长时间(以防止进程退出)。

在运行它之后,我有另一个COM客户端exe,它使用先前在CoCreateInstance上注册的对象的CLSID调用CoRegisterClassObject,

CoCreateInstance冻结线程,但如果关闭close进程,CoCreateInstance将立即返回“未注册的类”。

你们谁知道发生了什么事?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-17 11:56:56

然后睡很长一段时间(以防止这个过程退出)

据推测,服务器端对象驻留在STA中,而STA又要求线程上的消息泵/调度保持良好状态。通过在那里睡觉来冻结线程,你就阻止了它的操作。客户端进程等待与服务器进程/单元的通信,以及预期的锁定。

您需要用消息泵循环替换Sleep调用:

代码语言:javascript
复制
    MSG Message;
    while(GetMessage(&Message, NULL, WM_NULL, WM_NULL) > 0)
    {
        TranslateMessage(&Message);
        DispatchMessage(&Message);
    }

一个典型的过程退出预防是定期检查未完成的外部COM引用的数量。如果计数器大于零,并且在检查时刻为零,那么现在是退出的好时机。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18288127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档