我有一个关于多线程的概念性问题:
在通过DCOM使用RPC的应用程序中,通过多线程设备配置,主要形式是冻结。
1-如果CriticalSession是在单元初始化中创建的,则关键会话中的代码将在主线程上下文中运行?
2-当您调用该方法来执行任务时:
Thread 1 is created. (DCOM Thread) Thread 1 creates Thread 2. Thread 1 WaitFor Thread 2. Thread 2 creates 4 thread to run the task faster. 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个线程的优先级比主线程高,这有问题吗?当这成为一个问题的时候?
下图代表了系统的体系结构:

发布于 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:不同的优先级应该不是问题。只有当有太多高优先级线程做太多工作时才会出现问题,因此进行内部通信的普通优先级线程无法跟上,但在这种情况下,您应该检查工作线程如何报告其工作。
https://stackoverflow.com/questions/15339220
复制相似问题