Windows应用程序如何使用多个进程?

时间:2011-02-05 23:52:59

标签: windows multithreading winapi process

我在考虑Chrome& IE8作为具有多个进程的应用程序的示例,每个进程与单独的窗口(以及其他东西)相关联。这是如何运作的?特别关注GUI方面 - 我遇到的一个问题是Windows将HWND视为属于某个进程,还是一个进程可以任意与任何HWND进行交互?

4 个答案:

答案 0 :(得分:2)

  

这是如何工作的?特别关注GUI方面 - 我遇到的一个问题是Windows将HWND视为属于某个进程,还是一个进程可以任意与任何HWND进行交互?

每个HWND可以任意与之交互。例如,this post shows how to embed notepad into a Windows Forms panel

话虽如此,它经常导致程序无法正常运行,除非它们的设计考虑到这一点。

答案 1 :(得分:1)

这些程序中没有一个程序在多个进程之间共享GUI。

相反,它们在单独的进程中处理页面,并将所有UI交互路由到UI进程。

在多个流程之间共享GUI是可能的,但很难。

答案 2 :(得分:1)

这是一个很好的问题。我要抛弃我认为可能的解决方案。

主应用程序负责根据需要启动其他进程(选项卡)。这与旋转其他线程非常相似。

它将使用某种类型的进程间通信(例如命名管道)将命令从主应用程序传输到其他进程并检索结果。例如,告诉新选项卡转到特定URL。此外,它可以用于为子进程的绘图表面传递某种类型的句柄。

甚至只允许父进程准确设置子绘图区域的显示视图点。通过这种方式,您可以看到具有完全集成的应用程序,同时保持几乎完全分离。

这里的关键是要充分定义通信点。当然,好处是巨大的,因为死子进程不会杀死主要应用程序,除非两者之间的通信写得非常糟糕。

此外,只要通信点得到很好的保护,您就可以有效地沙箱子进程,防止它们与主机应用程序混在一起。而且,对于奖励积分,您甚至可以在有限的用户帐户下运行子流程,这将进一步限制他们可以做的损害。

您可以查看这些网站以获取数据共享的一些示例:http://www.catch22.net/tuts/tips#ShareData
http://msdn.microsoft.com/en-us/magazine/bb985041.aspx

答案 3 :(得分:0)

以下是进程和线程的MSDN描述。它包含很多好的信息: http://msdn.microsoft.com/en-us/library/ms681917(v=VS.85).aspx

对于Windows句柄,我相信它只是一个进程包含的资源。但是,我认为存在内置的安全措施和限制,以确定流程如何与彼此的资源(包括HWND)进行交互。