2009-09-21 13 views
14

Czy można utworzyć "grupę aplikacji", która działałaby w jednym oknie, ale w osobnych procesach, np. W przeglądarce Chrome? Chciałbym podzielić jedną aplikację na wiele części, aby jeden proces zawieszania się lub zacinania nie powodował odrzucenia innych, ale nadal zachowywał wygląd i sposób działania tak blisko oryginalnego systemu, jak to tylko możliwe.Jak stworzyć aplikację Chrome podobną do Delphi, która uruchamia wiele procesów w jednym oknie?

Wiem, że źródło Chrome jest dostępne, ale czy jest coś w połowie przygotowanego na Delphi?

Odpowiedz

6

Sądzę, że zasadniczo tworzyłbyś wiele procesów, z których każdy tworzy okno/formularz. Jeden z procesów ma okno główne, w którym osadzone jest każde okno potomne. Jest to tak proste jak wywołanie SetParent. Okna w różnych procesach będą komunikować się ze sobą za pomocą mechanizmu IPC (komunikacja między procesami), takiego jak named pipes lub komunikatów okna.

Zobacz przykład umieszczania przy użyciu SetParent w Delphi w postaci this question. Zobacz this question dla przykładu użycia nazwanych potoków w Delphi.

-1

Można oddzielić logikę aplikacji i wykonać ją w kilku wątkach. W ten sposób, jeśli jedna część logiki aplikacji się zawiesza, nadal masz responsywną aplikację. Ale nie będziesz w stanie umieścić GUI w wielu wątkach. VCL wymaga, aby uruchomić wszystkie elementy związane z GUI w głównym wątku.

+0

Dziękuję za sugestię, ale używam niektórych składników ActiveX, które muszą działać w głównym wątku. – Harriv

4

Harriv, możesz użyć schematu opartego na plugins. gdzie masz główną aplikację i to dynamicznie ładuj aktualności. Istnieje kilka bibliotek dostępnych tutaj, niektóre zostawiam.

alt text

Konstrukcje

Poradniki

Bye.

+1

Czy te frameworki obsługują wtyczki GUI poza procesami? –

+0

Dzięki, ale naprawdę szukam architektury wieloprocesowej, a nie wtyczkowej. – Harriv

+0

Lars, propozycja użycia wtyczek jest alternatywą dla zgłoszonego pytania, ze względu na dużą złożoność procesu tworzenia systemu "jak aplikacja Chrome", ponieważ "Google Chrome" implementuje architekturę wieloprocesową poza piaskownicą, administracją procesów , renderowanie izolowane (renderer) i wiele innych. – RRUZ

7

Spójrz na Delphi code z HeidiSQL. To świetny klient MySQL o otwartym kodzie źródłowym, który implementuje ten mechanizm.

Przeczytaj ten newsitem która została wysłana, gdy Chrome została wydana:

"Google playing catch-up with HeidiSQL?"

:-)

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

+1

Interesujące. Używa plików mapowanych pamięci współużytkowanych dla IPC. Zobacz http://heidisql.googlecode.com/svn/trunk/source/synchronization.pas –

+1

i WM_COPYDATA w http://heidisql.googlecode.com/svn/trunk/source/communication.pas –

+1

+1 to jest świetne podanie . który używa schematu opartego na muteksie Sekcje krytyczne. – RRUZ

-5

nie jestem pewien, jak Delphi działa ale typową procedurą wieloprocesowego programowanie się rozwidla.

Rozwinąłeś nowy proces przy użyciu dowolnego kodu. Przekaż informacje do rozwidlonego procesu i pozwól mu działać tak, jak chcesz.

Nie można objaśnić programowania wieloprocesowego w odpowiedzi na jeden wątek. Ale sprawdź to.

+2

-1. Ponieważ * fork * jest terminem uniksowym, zakładam, że masz na myśli ogólny sens "rozpoczęcia innego procesu". W takim przypadku odpowiedź brzmi: "programowanie wieloprocesowe rozpoczyna wiele procesów", co jest nieprzydatną tautologią. Również "sprawdzanie" nigdy nie jest przydatną odpowiedzią. Proszę wyjaśnić, jak działa programowanie wieloprocesowe lub podać linki (z podsumowaniami). –