Как приложение Windows может использовать несколько процессов? - PullRequest
3 голосов
/ 06 февраля 2011

Я думаю о Chrome и IE8 как о примерах приложений, которые имеют несколько процессов, каждое из которых связано с отдельными окнами (и другими вещами тоже). Как это работает? Конкретно сосредоточив внимание на стороне графического интерфейса - у меня есть один вопрос: рассматривает ли Windows HWND как принадлежащую процессу, или один процесс может произвольно взаимодействовать с любым HWND?

Ответы [ 4 ]

2 голосов
/ 06 февраля 2011

Как это работает?Конкретно сосредоточив внимание на стороне графического интерфейса - один вопрос, который у меня возникает, заключается в том, рассматривает ли Windows HWND как принадлежащую процессу, или один процесс может произвольно взаимодействовать с любым HWND?

С каждым HWND можно произвольно взаимодействовать, главным образом,Например, в этом посте показано, как встроить блокнот в панель Windows Forms .

При этом зачастую программы не работают должным образом, если они не предназначены для этого.

1 голос
/ 06 февраля 2011

Это отличный вопрос.Я собираюсь выбросить то, что я считаю возможным решением.

Основное приложение отвечает за ускорение дополнительных процессов (вкладок) по мере необходимости.Это очень похоже на раскручивание дополнительных нитей.

Он будет использовать некоторый тип межпроцессных обменов данными, таких как именованные каналы, для передачи команд из основного приложения в дополнительные процессы и получения результатов.Например, указание новой вкладке перейти на определенный URL.Кроме того, его можно использовать для передачи некоторого типа дескриптора для поверхности рисования дочернего процесса.

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

Ключевым моментом здесь является достаточно точное определение точки связи.Конечно, выгода огромна, так как мертвый подпроцесс не убьет основное приложение, ЕСЛИ БЕЗ сообщений не написано очень плохо.

Кроме того, если точки связи хорошо защищены, вы можете эффективно изолировать дочерние процессы, не допуская их порчи с главным приложением.А для получения бонусных баллов вы могли бы даже запускать дочерние процессы под ограниченными учетными записями пользователей, что дополнительно ограничивало бы, какой ущерб они могли бы нанести.

Вы можете посмотреть на этих сайтах несколько примеров обмена данными: http://www.catch22.net/tuts/tips#ShareData
http://msdn.microsoft.com/en-us/magazine/bb985041.aspx

1 голос
/ 06 февраля 2011

Ни одна из этих программ не использует графический интерфейс для нескольких процессов.

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

Совместное использование GUI среди нескольких процессов возможно, но сложно.

0 голосов
/ 06 февраля 2011

Вот описание MSDN процессов и потоков.Он содержит много полезной информации: http://msdn.microsoft.com/en-us/library/ms681917(v=VS.85).aspx

Что касается дескриптора окна, я считаю, что это просто ресурс, как и любой другой, который содержит процесс.Тем не менее, я думаю, что есть встроенные меры безопасности и ограничения на то, как процессы могут взаимодействовать с ресурсами друг друга, включая HWND.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...