2009-09-21 5 views
14

Ist es möglich, eine "Anwendungsgruppe" zu erstellen, die unter einem Fenster läuft, aber in separaten Prozessen, wie im Chrome-Browser? Ich möchte eine Anwendung in mehrere Teile aufteilen, so dass ein Absturz- oder Jamming-Prozess andere nicht ausmerzen kann, aber das Aussehen und das Gefühl so nahe wie möglich am ursprünglichen System halten.Wie erstellt man eine Chrome-ähnliche Anwendung in Delphi, die mehrere Prozesse in einem Fenster ausführt?

Ich weiß, dass die Chrome-Quelle verfügbar ist, aber gibt es etwas, das für Delphi noch halb fertig ist?

Antwort

6

Ich denke im Grunde würden Sie mehrere Prozesse erstellen, von denen jeder ein Fenster/Formular erstellt. Einer der Prozesse hat das Hauptfenster, in dem jedes untergeordnete Fenster eingebettet ist. Das ist so einfach wie das Rufen SetParent. Die Fenster in verschiedenen Prozessen würden unter Verwendung eines IPC (Inter Process Communication) Mechanismus wie named pipes oder Fenstermeldungen miteinander kommunizieren.

Ein Beispiel für die Verwendung von SetParent in Delphi finden Sie unter this question. Ein Beispiel für die Verwendung von Named Pipes in Delphi finden Sie unter this question.

-1

Sie können Ihre Anwendungslogik trennen und in mehreren Threads ausführen. Wenn also ein Teil Ihrer Anwendungslogik auflegt, haben Sie immer noch eine reaktionsfähige Anwendung. Aber Sie können die GUI nicht in mehrere Threads einfügen. Die VCL erfordert, dass Sie alle GUI-bezogenen Dinge im Hauptthread ausführen.

+0

Vielen Dank für den Vorschlag, aber ich verwende einige ActiveX-Komponenten, die im Hauptthread ausgeführt werden müssen. – Harriv

4

Harriv, Sie können ein Schema basierend auf plugins verwenden. wo Sie eine Hauptanwendung haben und diese dynamisch Nachrichtenfunktionalität laden. Es gibt mehrere Bibliotheken, die hier verfügbar sind.

alt text

Karkassen

Tutorials

Bye.

+1

Unterstützen diese Frameworks Out-of-Process-GUI-Plugins? –

+0

Danke, aber ich suche wirklich nach Multiprocessing, nicht nach Plugin-Architektur. – Harriv

+0

Lars, ein Vorschlag zur Verwendung von Plugins ist eine Alternative zu den in Frage gestellten, aufgrund der hohen Komplexität bei der Entwicklung eines Systems "wie Chrome-Anwendung", weil "Google Chrome" implementiert eine Multi-Prozess-Architektur hat neben Sandboxing, Prozessverwaltung Rendering isoliert (der Renderer) und viele mehr. – RRUZ

7

Werfen Sie einen Blick auf die Delphi code von HeidiSQL. Es ist ein großartiger Open-Source-MySQL-Client, der diesen Mechanismus implementiert.

dieses newsitem lesen, die gebucht wurde, wenn Chrome veröffentlicht wurde:

"Google playing catch-up with HeidiSQL?"

:-)

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

+1

Interessant. Es verwendet Shared Memory-Mapped-Dateien für IPC. Siehe http://heidisql.googlecode.com/svn/trunk/source/synchronization.pas –

+1

Und WM_COPYDATA in http://heidisql.googlecode.com/svn/trunk/source/communication.pas –

+1

+1 das ist ein toller Anwendung. die ein auf Mutex y basierendes Schema verwendet. Kritische Abschnitte. – RRUZ

-5

ich bin nicht sicher, wie Delphi für Multi-Prozess, aber die Standard-Verfahren arbeitet Programmierung ist Gabelung.

Sie verzweigen einen neuen Prozess mit welchem ​​Code Sie wollen. Übergeben Sie Informationen an den Verzweigungsprozess und lassen Sie ihn ausführen, was auch immer er möchte.

Kann Multiprozessprogrammierung in einer Threadantwort nicht erklären. Aber schau es dir an.

+2

-1. Da * fork * ein Unix-Begriff ist, nehme ich an, du meinst es im generischen Sinne von "einen anderen Prozess starten". In diesem Fall antworten Sie, dass "Multiprozess-Programmierung mehrere Prozesse startet", was eine nicht hilfreiche Tautologie ist. Auch "Nachschlagen" ist niemals eine hilfreiche Antwort. Bitte erläutern Sie, wie Multiprozess-Programmierung funktioniert oder stellen Sie Links (mit Zusammenfassungen) zur Verfügung. –