2009-09-21 58 views
14

是否有可能创建一个“应用程序组”,它可以在一个窗口下运行,但在单独的进程中运行,例如在Chrome浏览器中运行?我想将一个应用程序分成多个部分,这样一个崩溃或干扰过程不能取消其他应用程序,但仍尽可能保持原始系统的外观和感觉。如何在一个窗口内运行多个进程的Delphi中创建Chrome应用程序?

我知道Chrome源代码可用,但是有没有甚至有一半准备用于Delphi?

回答

6

我猜你基本上会创建多个进程,每个进程创建一个窗口/窗体。其中一个进程具有嵌入每个子窗口的主窗口。这与调用SetParent一样简单。不同进程中的窗口将使用IPC(进程间通信)机制(如named pipes或窗口消息)相互通话。对于在Delphi中使用SetParent的嵌入示例,请参阅this question。有关在Delphi中使用命名管道的示例,请参见this question

-1

您可以分离您的应用程序逻辑并在多个线程中执行它。这样,如果您的应用程序逻辑的一部分挂起,您仍然有一个响应式应用程序。但是,您将无法将GUI置于多个线程中。 VCL要求你在主线程中执行所有与GUI相关的东西。

+0

谢谢你的建议,但我使用了一些需要在主线程中运行的ActiveX组件。 – Harriv 2009-09-21 18:34:04

4

Harriv,你可以使用基于plugins的计划。你有一个主要的应用程序,这动态加载新闻功能。这里有几个图书馆,我留下了一些。

alt text

框架

01 TJvPluginManager个

教程

再见。

+1

这些框架是否支持进程外GUI插件? – 2009-09-21 17:55:32

+0

谢谢,但我真的在寻找多处理,而不是插件架构。 – Harriv 2009-09-21 18:35:38

+0

由于开发“像Chrome应用程序”这样的系统所涉及的高度复杂性,因为“Google Chrome”实现了除沙盒,流程管理以外的多进程体系结构,所以使用插件的提议是提交给有问题的替代方案,呈现孤立的(渲染器)等等。 – RRUZ 2009-09-21 19:56:25

7

查看HeidiSQLDelphi code。这是一个很好的开源MySQL客户端,它实现了这个机制。

阅读本newsitem被张贴的Chrome发布时:

"Google playing catch-up with HeidiSQL?"

:-)

HeidiSQL http://www.heidisql.com/images/forum/heidisql-windowlist-2.png

+1

有趣。它使用IPC的共享内存映射文件。见http://heidisql.googlecode.com/svn/trunk/source/synchronization.pas – 2009-09-21 17:59:35

+1

和WM_COPYDATA在http://heidisql.googlecode.com/svn/trunk/source/communication.pas – 2009-09-21 18:00:43

+1

+1这是一个伟大的申请。使用基于互斥量的模式在关键部分。 – RRUZ 2009-09-21 20:09:55

-5

我不知道德尔福如何运作但多进程的标准程序编程是分叉的。

你用任何你想要的代码来派生一个新的进程。将信息传递给分叉进程,让它按照自己的意愿运行。

在一个线程响应中无法解释多进程编程。但看看它。

+2

-1。由于* fork *是一个Unix术语,因此我假定您的意思是“启动另一个进程”。在这种情况下,你的回答是,“多进程编程开始多个进程”,这是一个无益的同义反复。另外,“查看它”永远不会是一个有用的答案。请解释多进程编程如何工作或提供链接(带摘要)。 – 2009-09-21 20:55:44

相关问题