Способ и система для реализации обмена сообщениями в прикладной программе с несколькими вкладками
Иллюстрации
Показать всеИзобретение относится к области программирования прикладных программ с несколькими вкладками. Техническим результатом является предотвращение распространения зависания окон страниц. Способ выполнения обмена сообщениями, относящийся к прикладной программе с несколькими, вкладками включает в себя этап создания одного или более окон страниц, соответствующих соответственным вкладкам в прикладной программе с несколькими вкладками, как одно или более окон верхнего уровня, при этом окном верхнего уровня является окно, не имеющее родительского окна, или родительским окном окна верхнего уровня является окно рабочего стола. А также, согласно заявленному способу, выполняют обмен сообщениями, относящимися к одному или более окнам страниц. 2 н. и 19 з.п. ф-лы, 6 ил.
Реферат
Эта заявка притязает на приоритет заявки на патент Китая №200910077869.5, поданной 23 января 2009 года в Патентное Ведомство Китая, озаглавленной "Способ и система для реализации обмена сообщениями в прикладной программе с несколькими вкладками", содержание которой включено в настоящий документ по ссылке во всей своей полноте.
Область техники, к которой относится изобретение
Настоящее изобретение имеет отношение к области программирования прикладных программ с несколькими вкладками и, в частности, имеет отношение к способам и системам для реализации обмена сообщениями в прикладной программе с несколькими вкладками.
Предшествующий уровень техники
Браузер часто является для пользователей наиболее используемым средством для выхода в Интернет. Во многих случаях пользователи надеются иметь возможность просматривать несколько веб-страниц одновременно. Поскольку размер экрана дисплея ограничен, разработаны браузеры с несколькими вкладками, как показано на фигуре 1. В этом браузере с несколькими вкладками каждая вкладка соответствует веб-странице, и пользователь может сосредоточиться на содержании только одной веб-страницы в конкретное время. Однако, когда пользователь хочет сосредоточиться на содержании других веб-страниц, пользователю нужно только переключить вкладки.
Хотя этот тип браузера с несколькими вкладками может предоставить пользователю удобство просмотра веб-страниц, часто происходит одно событие, называемое распространением зависания страницы (то есть, пользователь не может выполнять действия с веб-страницей, например, выполнять прокрутку страницы или щелкнуть мышью по ссылкам и т.д.). Таким образом, когда одно окно страницы зависает, другие окна страницы также находятся в зависшем состоянии вслед за зависанием одного окна страницы. Например, если пользователь открывает десять (10) веб-страниц и текущая страница является домашней страницей Sohu, в предположении, что когда пользователь просматривает текущую страницу, текущая страница внезапно зависает, пользователь не может выполнять действия с другими девятью (9) веб-страницами. В этот момент пользователь должен отменить просмотр других девяти страниц, заканчивает процесс просмотра, перезапускает браузер и вновь открывает девять веб-страниц для продолжения просмотра этих страниц.
Сущность изобретения
Настоящее изобретение нацелено на обеспечение способа и системы для реализации обмена сообщениями в прикладной программе с несколькими вкладками, которые могут решить проблему предшествующего уровня техники, заключающуюся в том, что когда одно окно страницы зависает, другие окна страниц также находятся в зависшем состоянии после зависания одного окна страницы.
Для достижения этой цели настоящее изобретение обеспечивает следующие аспекты.
Способ выполнения обмена сообщениями в прикладной программе с несколькими вкладками, содержащий этапы, на которых:
создают одно или более окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как одно или более окон верхнего уровня; и
выполняют обмен сообщениями, относящимися к одному или более окнам страниц.
Предпочтительно создание окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как одного или более окон верхнего уровня дополнительно содержит этап, на котором:
создают одно или более окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как одно или более окон верхнего уровня на том же уровне, что и главное окно прикладной программы с несколькими вкладками.
Предпочтительно выполнение обмена сообщениями, относящимися к окнам страницы, содержит этап, на котором:
отправляют посредством главного окна прикладной программы с несколькими вкладками одно или более сообщений окнам страниц в неблокирующем режиме.
Предпочтительно неблокирующий режим включает в себя:
асинхронный режим отправки сообщений или синхронный режим отправки сообщений с механизмом тайм-аута.
Предпочтительно выполнение обмена сообщениями, относящимися к окнам страниц, содержит этапы, на которых:
создают и сохраняют отношение сопоставления между главным окном прикладной программы с несколькими вкладками и одним или более окнами страниц;
отправляют посредством главного окна одно или более сообщений окнам страниц на основе отношения сопоставления между главным окном и одним или более окнами страниц;
инициируют выполнение одним или более окнами страниц одного или более действий, соответствующих принятым сообщениям.
Предпочтительно способ дополнительно содержит этап, на котором корректируют расположение и размер окон страниц для соответствия расположению и размеру главного окна прикладной программы с несколькими вкладками.
Предпочтительно способ дополнительно содержит этап, на котором, когда определено зависание окна страницы, соответствующего вкладке, выдают пользователю подсказку.
Предпочтительно создание одного или более окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как одного или более окон верхнего уровня дополнительно содержит этап, на котором:
при создании новой вкладки в прикладной программе с несколькими вкладками создают окно страницы, соответствующее новой вкладке, как окно верхнего уровня.
Предпочтительно прикладная программа с несколькими вкладками включает в себя одно или более из браузера веб-страниц с несколькими вкладками, редактора документов с несколькими вкладками и программы для чтения с несколькими вкладками.
Предпочтительно окна страниц, соответствующие вкладкам в прикладной программе с несколькими вкладками, принадлежат разным потокам;
и/или
главное окно прикладной программы с несколькими вкладками и одно или более окон страниц, соответствующих вкладкам, принадлежит разным потокам.
Предпочтительно создание окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как окон верхнего уровня дополнительно содержит этап, на котором:
создают окна страниц, соответствующие вкладкам в прикладной программе с несколькими вкладками, как одно или более окон верхнего уровня с пустым владельцем.
Система для выполнения обмена сообщениями в прикладной программе с несколькими вкладками, содержащая:
модуль управления окнами, выполненный с возможностью создавать одно или более окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как одно или более окон верхнего уровня;
модуль обмена сообщениями, выполненный с возможностью выполнять обмен сообщениями, относящимися к окнам страниц.
Предпочтительно модуль управления окнами дополнительно используется для создания одного или более окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как одного или более окон верхнего уровня на том же самом уровне, что и главное окно прикладной программы с несколькими вкладками.
Предпочтительно модуль обмена сообщениями дополнительно используется в главном окне прикладной программы с несколькими вкладками для отправки одного или более сообщений окнам страницы в неблокирующем режиме.
Предпочтительно модуль обмена сообщениями дополнительно содержит:
подмодуль хранения отношения сопоставления, выполненный с возможностью создавать и сохранять отношение сопоставления между главным окном прикладной программы с несколькими вкладками и одним или более окнами страниц;
подмодуль взаимодействия, используемый главным окном для отправки одного или более сообщений одному или более окнам страниц на основе отношения сопоставления между главным окном и одним или более окнами страниц, а также используемый для инициирования выполнения окнами страниц одного или более действий, соответствующих принятым сообщениям.
Предпочтительно система дополнительно содержит модуль корректировки окон, выполненный с возможностью корректировать расположение и размер одного или более окон страниц для соответствия расположению и размеру главного окна прикладной программы с несколькими вкладками.
Предпочтительно система дополнительно содержит модуль подсказки, выполненный с возможностью выдавать пользователю подсказку, когда окно страницы зависло.
Предпочтительно модуль управления окнами дополнительно выполнен с возможностью при создании новой вкладки в прикладной программе с несколькими вкладками создавать окно страницы, соответствующее новой вкладке, как окно верхнего уровня.
Предпочтительно прикладная программа с несколькими вкладками включает в себя одно или более из браузера веб-страниц с несколькими вкладками, редактора документов с несколькими вкладками и программы для чтения с несколькими вкладками.
Предпочтительно система дополнительно содержит первый модуль создания, выполненный с возможностью создавать окна страниц, соответствующие вкладкам в прикладной программе с несколькими вкладками/ в разных потоках;
и/или
второй модуль создания, выполненный с возможностью создавать главное окно прикладной программы с несколькими вкладками и одно или более окон страниц, соответствующих одной или более вкладок, в разных потоках.
Предпочтительно модуль управления окнами дополнительно выполнен с возможностью создавать одно или более окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как одно или более окон верхнего уровня с пустым владельцем.
Машиночитаемый носитель, содержащий инструкции компьютерной программы, причем когда инструкции компьютерной программы исполняются посредством компьютерного модуля, они дают компьютерному модулю команду:
создавать одно или более окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как одно или более окон верхнего уровня; и
выполнять обмен сообщениями, относящимися к окнам страниц.
Варианты воплощения настоящего изобретения раскрывают следующие технические эффекты.
В соответствии с вариантами воплощения настоящего изобретения посредством создания окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как окон верхнего уровня окна страниц больше не имеют родительского окна. Таким образом, при выполнении обмена сообщениями, относящимися к окнам страниц, не будет ситуации, в которой некоторое родительское окно отправляет системные сообщения окнам страницы в блокирующем режиме. Поэтому можно избежать проблемы распространения зависания окна страницы, вызванного посредством отправки таких системных сообщений. Даже если окно одной страницы зависнет, то окна других страниц не будут затронуты. Таким образом, действия с другими окнами страниц могут выполняться нормально, без влияния на нормальное исполнение прикладной программы.
Краткое описание чертежей
Фигура 1 - иллюстративная схема интерфейса браузера с несколькими вкладками в предшествующей области техники;
Фигура 2 - блок-схема способа, представленного вариантами воплощения изобретения, для реализации обмена сообщениями в прикладной программе с несколькими вкладками;
Фигура 3 - иллюстративная схема структуры окон браузера с несколькими вкладками в предшествующей области техники;
Фигура 4 - иллюстративная схема структуры окон браузера с несколькими вкладками в вариантах воплощения настоящего изобретения;
Фигура 5 - иллюстративная схема интерфейса во время зависания окна страницы в вариантах воплощения настоящего изобретения;
Фигура 6 - иллюстративная система для реализации обмена сообщениями в прикладной программе с несколькими вкладками в вариантах воплощения настоящего изобретения.
Описание предпочтительных вариантов воплощения
Для лучшего понимания упомянутых выше целей, отличительных признаков и преимуществ настоящего изобретения последующее описание дополнительно предоставляет подробные иллюстрации настоящего изобретения в сочетании с чертежами и подробными вариантами воплощения.
Как показано на фигуре 2, настоящие варианты воплощения обеспечивают способ, реализующий обмен сообщениями в прикладной программе с несколькими вкладками и включает в себя следующие этапы:
S201: Создание одного или более окон страниц, соответствующих вкладкам в прикладной программе с несколькими вкладками, как окон верхнего уровня;
S202: Выполнение обмена пользовательскими сообщениями в окнах верхнего уровня. То есть, выполнение обмена сообщениями, имеющими отношение к окнам страниц, например, обмена сообщениями между главным окном прикладной программы и окнами страниц как окнами верхнего уровня и т.д.
Для облегчения понимания далее кратко разъясняются концепции прикладных программ и окон с несколькими вкладками и окон верхнего уровня в операционных системах и т.д., упоминаемых в вариантах воплощения настоящего изобретения. Что касается вкладок, на фигуре 1 проиллюстрирован интерфейс традиционного веб-браузера с несколькими вкладками. На фигуре 1 маленькие прямоугольники, помещенные как "" ("Стартовая страница тура"), "" ("Соху-Китай…)" и "" ("Пустая страница") представляют собой вкладки отдельных веб-страниц, и каждая вкладка соответствует окну веб-страницы. Так называемая прикладная программа с несколькими вкладками интегрирует окна страниц, соответствующие отдельным вкладкам, которые должны быть отображены в одном окне, и осуществляет переключение между различными страницами, когда по вкладке щелкают мышью. Например, браузер веб-страниц, показанный на фигуре 1, может включать в себя несколько вкладок одновременно и, таким образом, называется веб-браузером с несколькими вкладками.
Прикладные программы с несколькими вкладками, описанные в вариантах воплощения данного изобретения, включают в себя, но без ограничения, веб-браузеры с несколькими вкладками, редакторы документов с несколькими вкладками (например. Excel и т.д.), программы для чтения документов с несколькими вкладками и т.д. Кроме того, следует отметить, что прикладная программа может представлять собой прикладную программу с одним процессом или прикладную программу с несколькими процессами, и окна страниц, соответствующие отдельным вкладкам, могут быть созданы в одном процессе или могут быть созданы в нескольких процессах. Однако создаются ли окна страниц в одном процессе или в нескольких процессах, все они могут иметь проблему распространения зависания. Решения такой проблемы посредством вариантов воплощения настоящего изобретения могут быть применены к прикладным программам с одним процессом, а также к прикладным программам с несколькими процессами.
Окно, описываемое в вариантах воплощения настоящего изобретения, представляет собой область системного дисплея. Прикладная программа использует окно для отображения вывода или приема ввода от пользователя. Следует отметить, что "окно", описанное в вариантах воплощения настоящего изобретения, не ограничено системой Windows и другими традиционными оконными операционными системами. Даже в отличных от Windows операционных системах, если в компьютерном интерфейсе обеспечен интерфейс взаимодействия между человеком и компьютером (HCI) (например, диалоговое окно и т.д.), он может быть расценен как окно, описанное в вариантах воплощения настоящего изобретения. С одной стороны, прикладная программа получает доступ к системному дисплею через окно; с другой стороны, прикладная программа совместно использует системный дисплей с другими прикладными программами, использующими окно. Поскольку в любой момент времени только одно окно может принимать пользовательский ввод, пользователь может взаимодействовать с окнами и прикладными программами, имеющими окна, через мышь, клавиатуру и другие устройства ввода.
Операционная система семейства Windows используется здесь в качестве примера. В операционной системе Windows (а также других оконных графических операционных системах, таких как операционная система для платформы Macintosh и т.д.) каждой основанной на графическом интерфейсе прикладной программе нужно создать по меньшей мере одно окно, которое называется главным окном. Это окно представляет собой основной интерфейс между пользователем и прикладной программой. Многие прикладные программы могут прямо или косвенно создавать некоторые другие окна для выполнения соответствующих задач. Как только окно создано, система Windows сможет предоставлять окну соответствующие сообщения взаимодействия с пользователем. Система Windows может автоматически выполнять много задач, требуемых пользователем, таких как перемещение окна, корректировка размера окна и т.д. В среде Windows может быть создано любое количество окон. Система Windows может отображать информацию множеством образов и ответственна за управление экраном дисплея и управлением позицией и отображением окон, чтобы гарантировать, что никакие две прикладные программы не конкурируют за одну и ту же часть системного дисплея одновременно.
Окно прикладной программы обычно содержит строку заголовка, строки меню, панели инструментов, границы, клиентские области, полосы прокрутки и другие компоненты. Взаимоотношение с несколькими окнами обычно основано на древоподобной структуре, то есть одно окно может иметь 0, 1 или 2 или больше дочерних окон, в то время как каждое дочернее окно может иметь только одно фиксированное родительское окно. Если конкретное окно не имеет родительского окна или является окном рабочего стола (окно с классом окна #32769 называется окном рабочего стола), это конкретное окно называется окном верхнего уровня.
Если по-прежнему использовать в качестве примера операционную систему Windows, выполнению прикладной программы системы Windows требуется полагаться на внешние события в качестве движущего механизма, и информация, описывающая внешние события, называется сообщениями. Например, когда пользователь нажимает клавишу на клавиатуре, система формирует специфическое сообщение, указывающее на возникновение события нажатия клавиши клавиатуры. Управление с помощью событий соответствует порядку выполнения прикладной программы системы Windows, зависящему от порядка возникновения событий, и конфигурация управляемых с помощью событий программ нацелена на формирование и обработку сообщений. При своей работе прикладная программа системы Windows постоянно принимает любые возможные сообщения ввода, принимает решение и затем выполняет соответствующую обработку.
Различные сообщения, полученные прикладной программой, могут быть классифицированы как сообщения ввода, сформированные аппаратными устройствами, и системные сообщения от операционной системы Windows.
Прикладная программа принимает ввод от сообщений ввода. Например, перемещение мыши или нажатие клавиши клавиатуры могут формировать сообщения ввода. Система Windows ответственна за отслеживание всех устройств ввода и помещение сообщений ввода в очередь, которая представляет собой заданный системой блок памяти для временного хранения сообщений, так называемую системную очередь сообщений. Каждый поток графического интерфейса устройств (GDI), работающий в системе Windows, имеет свою собственную очередь сообщений.
Когда пользователь перемещает мышь или нажимает клавишу клавиатуры, получающиеся в результате сообщения ввода сначала помещаются в системную очередь сообщений. Затем система Windows каждый раз удаляет одно сообщение ввода из системной очереди сообщений, определяет целевое окно для удаленного сообщения ввода и отправляет удаленное сообщение ввода в очередь сообщений прикладной программы, которая создала целевое окно. Прикладная программа принимает ввод посредством очереди прикладной программы: прикладная программа использует структуру управления, называемую циклом сообщений, для извлечения сообщений из очереди прикладной программы и отправляет извлеченное сообщение в соответствующее окно. Оконная функция соответствующего окна затем является ответственной за проверку сообщения и выполнение соответствующей обработки.
Системные сообщения отличаются от сообщений ввода. Система Windows непосредственно отправляет системное сообщение в соответствующую оконную функцию вместо того, чтобы отправлять его через системную очередь сообщений и очередь прикладной программы. Таким образом, система Windows непосредственно уведомляет конкретное окно о событии, влияющем на конкретное окно. Например, когда пользователь активирует окно прикладной программы, система Windows отправит соответствующие системные сообщения непосредственно в активированное окно.
Следует отметить, что в общем случае сообщение может быть отправлено в двух режимах: в блокирующем режиме (например, с помощью функции 'SendMessage' и т.д.) и в неблокирующем режиме (например, с помощью функций 'PostMessage', 'PostThreadMessage', 'SendMessageCallback', 'SendNotifyMessage' и 'SendMessageTimeout' и т.д.). Специалисты в области техники обычно называют 'SendMessage' синхронным способом отправки сообщения; 'PostMessage', 'PostThreadMessage', 'SendMessageCallback' и 'SendNotifyMessage' асинхронным способом отправки сообщения, и 'SendMessageTimeout' синхронным способом отправки сообщения с механизмом тайм-аута. Например, в предположении, что окно В не принадлежит потоку А (принадлежит ли окно В потоку А, определяется тем, каким потоком окно В было создано, то есть, если окно В было создано в потоке А, окно В принадлежит потоку А, иначе окно В не принадлежит потоку А), когда поток А отправляет сообщение окну В, разные режимы отправки сообщений могут иметь следующие характеристики.
Если поток A отправляет сообщение М в окно B в блокирующем режиме, поток А должен ожидать, пока окно В не завершит обработку сообщения М, прежде чем поток А сможет продолжать работать. Когда окно В обрабатывает сообщение М, любая проблема, такая как бесконечный цикл или взаимная блокировка и т.д., произошедшая во время процесса, может препятствовать возврату обработки сообщения. В этом случае окно В рассматривают как зависшее, затем поток А не может продолжать выполнение или принимать и обрабатывать другие сообщения. Таким образом, зависание окна В может непосредственно вызвать зависание потока А и последующее зависание всех окон в потоке А.
Если сообщение отправляется в неблокирующем режиме, поток А может сразу выполнить возврат после отправки сообщения окну В без необходимости ожидать, пока окно В не завершит обработку сообщения М (при использовании функции 'PostMessage' и других асинхронных способов нет необходимости ожидать; при использовании функции 'SendMessageTimeout' может быть задан порог времени ожидания, и если поток А ожидает в течение какого-либо времени дольше предварительно установленного порога, поток А может прекратить ожидание и выполнить возврат для обработки других сообщений). Таким образом, если окно В зависло, поток А может продолжать работать.
Следует отметить, что в упомянутых выше двух случаях окно В не принадлежит потоку А. Если окно В будет принадлежать потоку А, то зависание окна распространится независимо от того, отправлено ли сообщение в блокирующем режиме или в неблокирующем режиме. Таким образом, зависание окна В будет всегда влиять на поток А. Кроме того, окно В может являться дочерним окном или окном верхнего уровня, и структура окна не влияет на упомянутую выше работу.
Среди различных сообщений, принимаемых прикладной программой, режим отправки сообщений для сообщений ввода обычно определяется прикладной программой (обычно устанавливается неблокирующий режим); в то время как режим отправки для системных сообщений обычно определяется операционной системой. Если использовать в настоящий момент в качестве примера наиболее широко используемую операционную систему Windows, операционная система Windows отправляет системные сообщения в блокирующем режиме (обычно с использованием функции 'SendMessage').
Чтобы лучше понять способы, представленные в вариантах воплощения настоящего изобретения, далее в качестве примера используется браузер веб-страниц с несколькими вкладками, чтобы проанализировать причины, почему в браузере с несколькими вкладками, когда страница зависла, другие страницы не могут работать.
При создании окон текущие браузеры веб-страниц с несколькими вкладками обычно имеют окна страниц, соответствующие разным вкладкам, унаследованные от одного и того же родительского окна. Например, фигура 3 показывает структуру окон браузера Yaoyou, просматривающего ту же самую веб-страницу, как на фигуре 1.
На фигуре 3 окно "Maxthon2_View" представляет собой окно для отображения информационного содержания веб-страницы и называется просто окном страницы. Следует отметить, что окно "Maxthon2_View" представляет собой только контейнерное окно и также имеет другие дочерние окна, такие как окно "Internet Explorer_Server" (не показано) и т.д., сконфигурированные для отображения информационного содержания веб-страницы. Поскольку в настоящий момент открыты три (3) веб-страницы, в структуре окон имеется три окна страницы "Maxthon2_View", и все этих три окна страниц имеют окно "Afx:400000:2008:10011:0:0" в качестве родительского окна.
Другими словами, каждая вкладка соответствует веб-странице, и каждой веб-страницей управляет группа окон (называемая группой дочерних окон (не показана) под знаком '+' перед окном "Maxthon2_View" в диаграмме структуры окон). Группа дочерних окон имеет родительское окно (то есть, "Maxthon2_View"), и их родительское окно (то есть, окно "Maxthon2_View") также имеет родительское окно (то есть, окно "Afx:400000:2008:10011:0:0" в приведенной выше структуре окон).
В этой структуре окон, когда пользователь выполняет некоторые действия на странице, соответствующей вкладке (например, действие изменения масштаба веб-страницы), поток обработки является следующим: пользователь сначала нажимает кнопку изменения масштаба, и затем окно, содержащее эту кнопку, уведомляет главное окно с помощью сообщения о нажатии. Главное окно находит окно страницы, соответствующее отображаемой в настоящий момент вкладке, и отправляет сообщение изменения масштаба окну страницы. Окно страницы затем принимает сообщение и выполняет действие изменения масштаба. Безусловно, в этот период вследствие характеристик операционной системы Windows (как ранее описано), между окнами может быть выполнен обмен некоторыми системными сообщениями. Эти системные сообщения отправляет операционная система Windows в блокирующем режиме. Таким образом, действие на окне страницы может быть завершено только после того, как на все системные сообщения ответили.
Например, в структуре окон, показанной на фигуре 3 (для ясности, номера "05В6", "070С" и "0774" используются для соответственного представления окон страниц "Window 004705B6""Maxthon2_View," "Window 006C070C""Maxthon2_View" и "Window 00270774""Maxthon2_View"), в предположении, что окно, соответствующее отображаемой в настоящий момент вкладке, является "05В6", и пользователь нажал кнопку изменения масштаба, когда главное окно "Maxthon2_Fram" отправляет сообщение изменения масштаба окну "05В6" страницы, родительское окно окна "05В6" страницы "Afx:400000:2008:10011:0:0" должно отправить системное сообщение (сообщения) каждому из своих дочерних окон (например, "05В6," "070С" и "0774") в блокирующем режиме. Далее, только после того, как на все системные сообщения ответили, действие изменения масштаба на окне "05В6" страницы может быть завершено.
В этот момент, если отображаемое в настоящий момент окно "05В6" зависает, когда пользователь хочет работать с окном "070С", родительское окно "Afx:400000:2008:10011:0:0" окна "070С" страницы по-прежнему должно отправлять системные сообщения каждому из своих дочерних окон (например, "05В6", "070С" и "0774") в блокирующем режиме. Однако, поскольку окно "05В6" зависло, окно "05В6" не может ответить после того, как родительское окно "Afx:400000:2008:10011:0:0" отправляет системные сообщения окну "05В6". Таким образом, родительское окно "Afx: 400000:2008:10011:0:0" находится в состоянии вечного ожидания, и работа с окном "070С" не может быть завершена. Чтобы завершить работу с окном "070С," родительское окно "Afx: 400000:2008:10011:0:0" также должно отправить системные сообщения каждому из своих дочерних окон, в том числе окну "070С." Однако, поскольку зависшее окно "05В6" не может ответить родительскому окну "Afx:400000:2008:10011:0:0", и вследствие блокирующего режима родительское окно "Afx:400000:2008:10011:0:0" не может выполнить другие действия до приема ответа от окна "05В6" страницы, родительское окно "Afx:400000:2008:10011:0:0" не может завершить отправку системных сообщений всем дочерним окнам, чтобы завершить действие пользователя с окном "070С". Таким образом, действие пользователя с окном "070С" находится в состоянии вечного ожидания, и окно "070С" больше не может отвечать на системные сообщения. Аналогичным образом любое действие с окном "0774" также не может быть завершено. Таким образом, на основе родительско-дочерних взаимоотношений между окном "Afx:400000:2008:10011:0:0" и окнами "05В6", "070С" и "0774" страниц завершение любого действия с окном страницы требует, чтобы родительское окно "Afx:400000:2008:10011:0:0" отправляло системные сообщения каждому из своих дочерних окон в блокирующем режиме. Поэтому зависание любого из окон страниц может непосредственно повлиять на другие окна страниц и сделать невозможной действия с ними.
Если все системные сообщения в системе Windows могут быть отправлены в неблокирующем режиме, то можно естественным образом предотвратить зависание прикладной программы, пока разные окна помещены в разные потоки. Но, как упомянуто прежде, фактически это не тот случай. Только некоторые периферийные сообщения (такие как сообщения мыши, клавиатуры и т.д.) и сообщения отрисовки (WM_PAINT, WM_NCPAINT и т.д.) отправляются в неблокирующем режиме. Другие системные сообщения (такие как уведомление об изменении размера WM_SIZE, уведомление об изменении расположения WM_POSCHANGING и WM_POSCHANGED и т.д.) отправляются в блокирующем режиме.
В предположении, что окно В зависло, если поток А отправляет сообщение окну B в неблокирующем режиме, выполнение потока А не будет затронуто (только сообщение не будет обработано вовремя). Но если поток А отправляет системное сообщение окну В (системное сообщение обычно отправляют в блокирующем режиме), то поток А зависнет после зависания окна В. Поскольку эти системные сообщения реализованы в пределах системы Windows, распространение зависания окна страницы не может быть предотвращено посредством изменения прикладных программ третьей стороны (таких как браузеры).
При выполнении обмена пользовательскими сообщениями в прикладной программе с несколькими вкладками следующие системные сообщения могут обычно формироваться и отправляться в блокирующем режиме.
Родительское окно имеет одно или более дочерних окон. Когда родительское окно имеет фокус (например, главное окно браузера становится текущим активным окном посредством некоторого действия), система Windows отправляет сообщение WM_CHILDACTIVATE в блокирующем режиме.
Следует отметить, что в некоторых операционных системах (таких как операционная система Windows), могут быть ситуации, когда несколько окон верхнего уровня (A, B, C,…) имеют общее окно O "владельца". Когда размер или состояние отображения окон верхнего уровня изменяется, окно О владельца отправит сообщения WM_POSCHANGING и WM_POSCHANGED другим окнам высокого уровня (B, C, …) в блокирующем режиме. Безусловно, эти ситуации могут не существовать в других операционных системах.
Как можно заметить из приведенного выше анализа, первопричина проблемы зависания одного окна, приводящего к невозможности нормальной работы браузера, заключается в следующем: окна страниц, соответствующие отдельным вкладкам, имеют общее родительское окно, и когда отдельные окна страниц отвечают на сообщения пользовательского ввода, родительское окно отправляет (в блокирующем режиме) системные сообщения отдельным окнам страницы. Только когда каждое системное сообщение может быть обработано нормально, обмен пользовательскими сообщениями может быть завершен. Поэтому, если окно А страницы зависнет, когда родительское окно отправляет системное сообщение окну А страницы, окно А страницы не будет в состоянии возвратить ответное сообщение родительскому окну, что заставляет родительское окно находиться в состоянии вечного ожидания. В этот момент, если с другими окнами страниц нужно выполнить действия, родительское окно не может ответить. Таким образом, действия с другими окнами страниц не могут быть завершены, что может вызвать даже невозможность нормальной работы всей прикладной программы.
Кроме того, в приведенном выше примере, показанном на фигуре 3, отдельные окна страниц представляют собой дочерние окна, окна "Afx:400000:2008:10011:0:0", и окно "Afx:400000:2008:10011:0:0" также представляет собой дочернее окно главного окна. Таким образом, в этом примере отношение между главным окном и отдельными окнами страниц не являются прямыми родительско-дочерними отношениями. Однако на практике специалисты в области техники понимают, что вследствие различия в проектировании различных прикладных программ с несколькими вкладками могут существовать ситуации, в которых отдельные окна страниц представляют собой прямые дочерние окна главного окна (то есть, между ними имеются прямые родительско-дочерние отношения), или в которых между отдельными окнами страниц и главным окном существуют несколько уровней окон, и т.д. Но независимо от ситуации отдельные окна страниц имеют родительское окно, и родительское окно будет отправлять системные сообщения отдельным окнам страниц в блокирующем режиме. Таким образом, явление распространения зависания всегда существует.
Однако на практике может не иметь практического значения для родительского окна, чтобы отправлять системное сообщение отдельным окнам страниц в блокирующем режиме (операционная система может использовать системное сообщение, но прикладная программа может не использовать системное сообщение. Другими словами, даже если система Windows не отправляет это системное сообщение, прикладная программа может по-прежнему работать правильно). Когда отдельные окна страниц принимают системное сообщение, отдельным окнам страниц может быть только необходимо вернуть ответное сообщение без какой-либо другой обработки. Таким образом, фактически, если родительское окно не отправило системное сообщение в отдельные окна страниц, отображаемое в настоящий момент окно страницы по-прежнему может обработать сообщения пользовательского ввода.
Таким образом в вариантах воплощения настоящего изобретения окна страниц, соответствующие нескольким вкладкам в прикладной программе с несколькими вкладками, создаются как окна верхнего уровня, на том же самом уровне, как главное окно. Таким образом, нет родительского окна, отправляющего какое-либо системное сообщение отдельным окнам страниц в блокирующем режиме. Безусловно, в системе Windows и других операционных системах отдельные окна страниц могут по-прежнему иметь общего владельца, и владелец также может отправлять системное сообщение отдельным окнам страниц. Чтобы избежать отправки окном владельца системного сообщения отдельным окнам страниц, владелец окон верхнего уровня устанавливается пустым.
Таким образом, что касается структуры окон, прикладная программа, ранее соответствующая одной древовидной структуре, теперь соответствует нескольким древовидным структурам (количество древовидных структур определено количеством вкладок в прикладной программе). Фигура 4 иллюстрирует структуру окон браузера с несколькими вкладками, представленного в вариантах воплощения настоящего изобретения. Как показано, окно SE_AxControl представляет собой окно страницы, соответствующее каждой вкладке. Можно заметить, что эта структура делает окно страницы, соответствующее вкладке, больше не имеющим родительского окна (или имеющим рабочий стол в качестве родительского окна). Таким образом, когда окно страницы отвечает на сообщение пользовательского ввода, больше нет родительского окна, отправляющего сообщения отдельным окнам страниц, и каждое окно страницы независимо среди других. Таким образом, при ответе на сообщения пользовательского ввода, даже если конкретное окно страницы зависло, другие окна стран