gpt4 book ai didi

multithreading - 使用 DCOM 处理线程

转载 作者:行者123 更新时间:2023-12-01 16:18:10 25 4
gpt4 key购买 nike

我有一个关于多线程的概念性问题:

在通过 DCOM 使用 RPC 的应用程序中,使用多线程单元配置,主窗体卡住。

1 - 如果 CriticalSession 在单元初始化时创建,那么 CriticalSession 中的代码将在主线程上下文中运行?

2 - 当您调用方法来执行任务时:
线程 1 已创建。 (DCOM 线程)
线程 1 创建线程 2。
线程 1 等待线程 2。
线程 2 创建 4 个线程以更快地运行任务。
线程 2 循环休眠 2 秒,直到 4 个线程结束。在此过程中,主窗体应该刷新以显示完成的百分比。一条消息被发布到主表单线程,其中包含完成百分比,但没有任何反应并且主表单被卡住。

3 - 当 4 个线程需要在线程 2 中创建 CRUD(创建、读取、更新、删除)对象时,是否有更好的方法来代替 synchronized() 方法来在其中一个线程内进行同步?

4 - 4 个线程的优先级高于主线程,这是一个问题吗?当这成为一个问题时?

下图代表了系统的架构:

System Architecture

最佳答案

1:不。通过使用关键部分,您可以保证代码一次仅在一个线程中运行;实际上,任何调用 Enter 的线程都将挂起,直到也运行该代码的任何其他线程到达 Leave 调用为止。但这并不意味着它将在主线程中运行(使用 GetCurrentThreadID 检查)

2:您提到了公寓配置,但是哪种公寓线程模型?这定义了 (D)COM 何时为您进行线程同步。实际上,COM 将在幕后使用代理 stub 和编码来遍历单元(和网络)边界,除非您选择了多线程单元,在这种情况下,COM 将假设组件负责线程处理问题本身。

如果我理解正确的话,主窗体会卡住在“Thread 1 WaitFor Thread 2”上。您最好在 Thread2 上使用 OnTerminate 事件,而不是调用 WaitFor。

3:我不确定“线程 2 中的 CRUD 对象”是什么意思。如果知道 4 个线程完成的顺序并不重要,我建议按顺序在线程上调用 WaitFor。如果是,您应该查看WaitForMultipleObjects .

4:不同的优先级应该不是问题。仅当有太多高优先级线程执行过多工作,导致进行内部通信的普通优先级线程无法跟上时,这才可能成为问题,但在这种情况下,您应该检查工作线程如何报告其工作。

关于multithreading - 使用 DCOM 处理线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15339220/

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