gpt4 book ai didi

windows - 如何在 COM 组件中创建线程?

转载 作者:可可西里 更新时间:2023-11-01 09:32:01 24 4
gpt4 key购买 nike

我有一个在 COM 服务中实例化的 COM 组件(此 .exe 正在运行)。

我有十个客户。每个客户端都从 ROT 获取接口(interface) (IXyz) 指针并同时调用方法 IXyz::abc()。

根据我的跟踪,我看到 IXyz::abc() 同时被调用了 10 次,但是在 10 个不同的线程中。

谁在创建这 10 个线程?

最佳答案

如果您仔细想想,COM 的行为是有道理的。代码在服务进程内部执行。如果将类标记为在单线程单元中运行,则一次只有一个线程执行。并发调用堆积在消息 qeueu 中,一次执行一个。如果指定了多线程单元,则代码可以并发执行。为了在运行过程中完成此操作,需要启动多个线程来实现此行为。

如果您想避免并发问题,您需要将您的类放在一个 dll 中。然后你仍然有多个线程,但每个线程都在调用进程中执行,所以你不需要担心状态。

没有线程就无法同时执行任何代码块。即使您在单独的进程中执行,仍然涉及多个线程,它们只是被进程边界分隔开。

我只是在痛斥那些显而易见的事情,因为我曾经在一家公司工作过,但他们无法理解这一点。 :-) 他们认为可以通过在单独的进程中执行并使用共享内存(内存映射文件)来避免线程问题!当他们的代码在单个 CPU 上运行并且他们添加了一个“修复”应用程序来修复不一致时,这(有点)起作用了。在上次安装时,他们转移到多个 CPU,一切都崩溃了。然后我就走了,结束。

关于windows - 如何在 COM 组件中创建线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/861730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com