首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DCOM处理线程

使用DCOM处理线程
EN

Stack Overflow用户
提问于 2013-03-11 20:59:22
回答 1查看 1.1K关注 0票数 1

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

在通过DCOM使用RPC的应用程序中,通过多线程设备配置,主要形式是冻结。

1-如果CriticalSession是在单元初始化中创建的,则关键会话中的代码将在主线程上下文中运行?

2-当您调用该方法来执行任务时:

代码语言:javascript
复制
   Thread 1 is created. (DCOM Thread) 
代码语言:javascript
复制
   Thread 1 creates Thread 2.
代码语言:javascript
复制
   Thread 1 WaitFor Thread 2.
代码语言:javascript
复制
   Thread 2 creates 4 thread to run the task faster.
代码语言:javascript
复制
   Thread 2 loops sleeping 2 seconds until the end of the 4 threads. In this processes the main form is supposed to be refreshed to display the percent done. A message is posted to the main form thread with the percent done, but nothing happens and the main form is freezed.

3-有一种比synchronized()方法更好的方法,当4个线程中的一个线程需要在Thread 2中创建、读取、更新、删除(Create Read Update Delete)对象时,可以在其中一个线程中进行同步。

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

下图代表了系统的体系结构:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-11 23:40:13

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

2:你提到了单元配置,但是哪个单元线程模型呢?这定义了什么时候(D)COM会为你的做线程同步。在实践中,COM将在后台使用代理存根和编组来遍历单元(和网络)边界,除非您选择了多线程单元,在这种情况下,COM将假定组件自己处理线程问题。

如果我理解正确的话,主窗体冻结在“Thread1 WaitFor Thread2”上。与其调用WaitFor,不如在Thread2上使用OnTerminate事件。

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

4:不同的优先级应该不是问题。只有当有太多高优先级线程做太多工作时才会出现问题,因此进行内部通信的普通优先级线程无法跟上,但在这种情况下,您应该检查工作线程如何报告其工作。

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

https://stackoverflow.com/questions/15339220

复制
相关文章

相似问题

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