Как создать приложение в стиле Chrome в Delphi, которое запускает несколько процессов внутри одного окна?

Можно ли создать «группу приложений», которая работала бы под одним окном, но в отдельных процессах, как в браузере Chrome? Я хотел бы разделить одно приложение на несколько частей, чтобы один процесс сбоя или заедания не мог остановить другие, но при этом сохранял внешний вид как можно ближе к исходной системе.

Я знаю, что исходный код Chrome доступен, но есть ли что-нибудь даже наполовину готовое для Delphi?


person Harriv    schedule 21.09.2009    source источник


Ответы (6)


Я предполагаю, что в основном вы должны создать несколько процессов, каждый из которых создает окно / форму. Один из процессов имеет главное окно, в которое встроено каждое дочернее окно. Это так же просто, как вызвать SetParent. Окна в разных процессах будут взаимодействовать друг с другом с помощью механизма IPC (межпроцессного взаимодействия), такого как именованные каналы или оконные сообщения.

См. этот вопрос для примера внедрения использования SetParent в Delphi. См. это вопрос для примера использования именованных каналов в Delphi.

person Lars Truijens    schedule 21.09.2009

Взгляните на код Delphi HeidiSQL. Это отличный клиент MySQL с открытым исходным кодом, который реализует этот механизм.

Прочтите эту новость, опубликованную при выпуске Chrome:

"Google догоняет HeidiSQL?"

:-)

HeidiSQL
(источник: heidisql.com)

person Wouter van Nifterick    schedule 21.09.2009
comment
Интересный. Он использует файлы с отображением общей памяти для IPC. См. heidisql.googlecode.com/svn/trunk/source/synchronization.pas - person Lars Truijens; 21.09.2009
comment
+1 это отличное приложение. который использует схему, основанную на мьютексах и критических разделах. - person RRUZ; 22.09.2009

Харрив, вы можете использовать схему, основанную на плагинах. где у вас есть основное приложение и функция динамической загрузки новостей. Здесь доступно несколько библиотек, я оставлю несколько.

alt text

Фреймворки

Руководства

Пока.

person RRUZ    schedule 21.09.2009
comment
Спасибо, но я действительно ищу многопроцессорность, а не архитектуру плагинов. - person Harriv; 21.09.2009
comment
Ларс, предложение использовать плагины является альтернативой рассматриваемому из-за высокой сложности разработки такой системы, как приложение Chrome, поскольку Google Chrome реализует многопроцессорную архитектуру, помимо песочницы, администрирования процессов и изолированного рендеринга ( рендерер) и многое другое. - person RRUZ; 21.09.2009

Взгляните на: http://blogs.microsoft.co.il/blogs/maxim/archive/2008/09/23/curiosity-killed-the-programmer-multiprocess-browser.aspx. Источник приложения находится в CSharp. Я уверен, что вы сможете адаптировать его к Delphi.

person TwinForms    schedule 21.09.2009
comment
Хороший. Использует SetParent для встраивания и .Net Remoting для IPC - person Lars Truijens; 22.09.2009

Вы можете разделить логику своего приложения и выполнить его в нескольких потоках. Таким образом, если какая-то часть логики вашего приложения зависнет, у вас все еще будет отзывчивое приложение. Но вы не сможете разместить графический интерфейс в нескольких потоках. VCL требует, чтобы вы выполняли все, что связано с графическим интерфейсом, в основном потоке.

person jpfollenius    schedule 21.09.2009
comment
Спасибо за предложение, но я использую некоторые компоненты ActiveX, которые необходимо запускать в основном потоке. - person Harriv; 21.09.2009

Я не уверен в том, как работает Delphi, но стандартная процедура многопроцессного программирования - это разветвление.

Вы создаете новый процесс с любым кодом, который хотите. Передайте информацию разветвленному процессу и позвольте ему работать, делая все, что он хочет.

Не могу объяснить многопроцессорное программирование в одном ответе потока. Но посмотри вверх.

person Dmitriy Likhten    schedule 21.09.2009
comment
-1. Поскольку fork - термин Unix, я предполагаю, что вы имеете в виду его в общем смысле запуска другого процесса. В этом случае вы отвечаете, что многопроцессное программирование запускает несколько процессов, что является бесполезной тавтологией. Кроме того, поиск никогда не будет полезным ответом. Пожалуйста, объясните, как работает многопроцессорное программирование, или предоставьте ссылки (с резюме). - person Rob Kennedy; 22.09.2009