是否有可能创建一个“应用程序组”,它可以在一个窗口下运行,但在单独的进程中运行,例如在Chrome浏览器中运行?我想将一个应用程序分成多个部分,这样一个崩溃或干扰过程不能取消其他应用程序,但仍尽可能保持原始系统的外观和感觉。如何在一个窗口内运行多个进程的Delphi中创建Chrome应用程序?
我知道Chrome源代码可用,但是有没有甚至有一半准备用于Delphi?
是否有可能创建一个“应用程序组”,它可以在一个窗口下运行,但在单独的进程中运行,例如在Chrome浏览器中运行?我想将一个应用程序分成多个部分,这样一个崩溃或干扰过程不能取消其他应用程序,但仍尽可能保持原始系统的外观和感觉。如何在一个窗口内运行多个进程的Delphi中创建Chrome应用程序?
我知道Chrome源代码可用,但是有没有甚至有一半准备用于Delphi?
我猜你基本上会创建多个进程,每个进程创建一个窗口/窗体。其中一个进程具有嵌入每个子窗口的主窗口。这与调用SetParent一样简单。不同进程中的窗口将使用IPC(进程间通信)机制(如named pipes或窗口消息)相互通话。对于在Delphi中使用SetParent的嵌入示例,请参阅this question。有关在Delphi中使用命名管道的示例,请参见this question。
您可以分离您的应用程序逻辑并在多个线程中执行它。这样,如果您的应用程序逻辑的一部分挂起,您仍然有一个响应式应用程序。但是,您将无法将GUI置于多个线程中。 VCL要求你在主线程中执行所有与GUI相关的东西。
查看HeidiSQL的Delphi code。这是一个很好的开源MySQL客户端,它实现了这个机制。
阅读本newsitem被张贴的Chrome发布时:
"Google playing catch-up with HeidiSQL?"
:-)
HeidiSQL http://www.heidisql.com/images/forum/heidisql-windowlist-2.png
有趣。它使用IPC的共享内存映射文件。见http://heidisql.googlecode.com/svn/trunk/source/synchronization.pas – 2009-09-21 17:59:35
和WM_COPYDATA在http://heidisql.googlecode.com/svn/trunk/source/communication.pas – 2009-09-21 18:00:43
+1这是一个伟大的申请。使用基于互斥量的模式在关键部分。 – RRUZ 2009-09-21 20:09:55
我不知道德尔福如何运作但多进程的标准程序编程是分叉的。
你用任何你想要的代码来派生一个新的进程。将信息传递给分叉进程,让它按照自己的意愿运行。
在一个线程响应中无法解释多进程编程。但看看它。
-1。由于* fork *是一个Unix术语,因此我假定您的意思是“启动另一个进程”。在这种情况下,你的回答是,“多进程编程开始多个进程”,这是一个无益的同义反复。另外,“查看它”永远不会是一个有用的答案。请解释多进程编程如何工作或提供链接(带摘要)。 – 2009-09-21 20:55:44
看一看:http://blogs.microsoft.co.il/blogs/maxim/archive/2008/09/23/curiosity-killed-the-programmer-multiprocess-browser.aspx。该应用程序的源代码在CSharp中。我相信你可以适应Delphi。
不错。使用SetParent进行IPC的嵌入和.Net Remoting – 2009-09-22 14:24:28
谢谢你的建议,但我使用了一些需要在主线程中运行的ActiveX组件。 – Harriv 2009-09-21 18:34:04