2009-09-21 28 views
14

Có thể tạo một "nhóm ứng dụng" sẽ chạy dưới một cửa sổ, nhưng trong các quy trình riêng biệt, như trong trình duyệt Chrome? Tôi muốn chia một ứng dụng thành nhiều phần, do đó, một quá trình phá vỡ hoặc gây nhiễu không thể lấy đi những phần khác, nhưng vẫn giữ được giao diện gần với hệ thống ban đầu nhất có thể.Làm thế nào để tạo Chrome như ứng dụng trong Delphi chạy nhiều tiến trình bên trong một cửa sổ?

Tôi biết nguồn Chrome có sẵn, nhưng có bất kỳ điều gì thậm chí một nửa đã sẵn sàng cho Delphi không?

Trả lời

6

Tôi đoán về cơ bản bạn sẽ tạo nhiều quy trình mà mỗi quy trình tạo ra một cửa sổ/biểu mẫu. Một trong các quy trình có cửa sổ chính trong đó mỗi cửa sổ con được nhúng. Điều đó đơn giản như gọi số SetParent. Các cửa sổ trong các quy trình khác nhau sẽ trao đổi với nhau bằng cách sử dụng cơ chế IPC (Giao tiếp giữa các quá trình) như named pipes hoặc thông báo cửa sổ.

Xem this question để có ví dụ nhúng về sử dụng SetParent trong Delphi. Xem this question để biết ví dụ về cách sử dụng các đường ống có tên trong Delphi.

-1

Bạn có thể tách logic ứng dụng của bạn và thực hiện nó trong một số chủ đề. Bằng cách đó, nếu một phần của logic ứng dụng của bạn bị treo, bạn vẫn có một ứng dụng đáp ứng. Nhưng bạn sẽ không thể đặt GUI trong nhiều luồng. VCL yêu cầu bạn thực hiện tất cả các công cụ liên quan đến GUI trong chuỗi chính.

+0

Cảm ơn bạn đã đề xuất, nhưng tôi đang sử dụng một số thành phần ActiveX cần chạy trong chuỗi chính. – Harriv

4

Harriv, bạn có thể sử dụng lược đồ dựa trên plugins. nơi bạn có ứng dụng chính và chức năng tin tức tải động này. Có một số thư viện có sẵn ở đây tôi để lại một số.

alt text

Khung

Hướng dẫn

Bye.

+1

Các khung công tác đó có hỗ trợ các plugin GUI ngoài quy trình không? –

+0

Cảm ơn, nhưng tôi thực sự đang tìm kiếm đa xử lý, không phải kiến ​​trúc plugin. – Harriv

+0

Lars, đề xuất sử dụng Plugin là giải pháp thay thế cho nội dung được gửi đến, do sự phức tạp cao liên quan đến việc phát triển hệ thống "như ứng dụng Chrome" vì "Google Chrome" thực hiện kiến ​​trúc đa quy trình bên cạnh hộp cát, quản lý quy trình , hiển thị phân lập (trình kết xuất đồ họa) và nhiều thứ khác. – RRUZ

7

Hãy xem Delphi code của HeidiSQL. Đó là một khách hàng MySQL nguồn mở tuyệt vời thực hiện cơ chế này.

đọc newsitem này đã được đăng khi Chrome được phát hành:

"Google playing catch-up with HeidiSQL?"

:-)

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

+1

Thú vị. Nó sử dụng các tệp ánh xạ bộ nhớ chia sẻ cho IPC. Xem http://heidisql.googlecode.com/svn/trunk/source/synchronization.pas –

+1

Và WM_COPYDATA trong http://heidisql.googlecode.com/svn/trunk/source/communication.pas –

+1

+1 đây là một điều tuyệt vời ứng dụng . mà sử dụng một lược đồ có trụ sở tại mutex y Các phần quan trọng. – RRUZ

-5

Tôi không chắc chắn về cách Delphi hoạt động nhưng quy trình chuẩn cho đa tiến lập trình là forking.

Bạn nĩa một quy trình mới bằng bất kỳ mã nào bạn muốn. Chuyển thông tin cho quá trình chia nhỏ và để cho nó chạy bất cứ điều gì nó muốn.

Không thể giải thích lập trình đa xử lý trong một chuỗi phản hồi. Nhưng nhìn nó đi.

+2

-1. Vì * fork * là một thuật ngữ Unix, tôi giả sử bạn có nghĩa là nó theo nghĩa chung của "bắt đầu một quá trình khác." Trong trường hợp đó, bạn trả lời là, "lập trình đa xử lý đang bắt đầu nhiều quy trình", đó là một thuật ngữ vô ích. Ngoài ra, "tìm kiếm nó" không bao giờ là một câu trả lời hữu ích. Vui lòng giải thích cách lập trình đa xử lý hoạt động hoặc cung cấp liên kết (có tóm tắt). –

Các vấn đề liên quan