Delphi COM EXE 和线程

Posted

技术标签:

【中文标题】Delphi COM EXE 和线程【英文标题】:Delphi COM EXE and Threading 【发布时间】:2010-09-23 02:48:00 【问题描述】:

只是想与那里的 COM/DCOM 专家确认...

我有一个在服务器上运行的 Delphi COM EXE(线程是 Single Apartment),并且同一 EXE 的另一个副本在同一服务器上启动 (一台服务器有 2 个双核处理器,因此任务管理器会显示 4 个单独的图表)它们会轮流等待对方还是会在不同的内核上运行?

我在某处发现了一个帖子说

“如果两个客户端需要使用同一个对象,他们必须轮流使用。使用这种线程模型,实例数据是安全的,全局数据必须使用临界区或其他形式的序列化来保护。当然,线程的局部变量在多次调用中都是可靠的。”

【问题讨论】:

【参考方案1】:

您错过了“来自同一服务器的不同对象”部分from the same paragraph。由于您有“单实例化”,因此每个 COM 对象实例都有一个单独的服务器,因此可以并行处理对这些实例的调用,并且 COM 不必提供任何互斥。

这样想。线程模型用于提供线程安全——同步访问同一进程的线程之间共享的数据。每个进程都有一个对象,因此没有两个线程会尝试访问同一个对象,除非您尝试将指向一个对象的指针传递给另一个对象方法调用。

【讨论】:

以上是关于Delphi COM EXE 和线程的主要内容,如果未能解决你的问题,请参考以下文章

delphi之多线程编程

delphi 线程 TTask

delphi 线程教学第四节:多线程类的改进

delphi 如何在自动终止线程和手动终止线程时都正确的设置窗体上的控件

转:学习笔记: Delphi之线程类TThread

Delphi Socket通信及多线程编程总结