Создание Windows-приложений начинается с того, что мы создаем новый проект типа Windows Application, выбирая соответствующий шаблон для одного из установленных языков программирования — Visual Basic .NET, С# и т.д.
Нажатие кнопки OK приводит к загрузке выбранного нами шаблона и к появлению основных окон среды разработчика. Этими окнами являются:
- окно дизайнера форм;
- палитра компонентов;
- окно для просмотра компонентов приложения (Solution Explorer);
- окно для установки свойств (Properties).
Создание Windows-приложения заключается в расположении компонентов на форме, изменении их свойств, написании кода для обработки возникающих событий и написании кода, определяющего логику самого приложения.
Для переключения между режимом визуального проектирования формы и режимом редактирования кода используются клавиши F7 (режим кода) и Shift-F7 (режим дизайна). На следующем рисунке показана работа в режиме редактирования кода (обратите внимание на то, что вместо Solution Explorer мы включили браузер классов (Class View), который может быть полезен для быстрой навигации по исходному коду создаваемого нами приложения).
ТОП ПРОГРАММ с открытым кодом, о которых ты не знал
Палитра компонентов (ToolBox), вызываемая нажатием клавиш Ctrl-Alt-X, содержит все стандартные компоненты, которые мы можем использовать в Windows-приложениях. Она разделена на несколько вкладок:
- Windows Forms — здесь располагаются компоненты, реализующие различные интерфейсные элементы, используемые в Windows-приложениях;
- Components — здесь мы обнаружим компоненты, выполняющие различные сервисные функции: слежение за изменениями в файловой системе (FileSystemWatcher), регистрацию событий (EventLog), управление очередью сообщений (MessageQueue), управление процессами (Process) и т.д.;
- Data — расположенные на этой вкладке компоненты используются для создания приложений, работающих с базами данных. К таким компонентам, в частности, относятся SqlConenction, OleDbConenction, SqlCommand, OleDbCommand, DataView, DataSet и ряд других (более подробно тему использования баз данных мы рассмотрим в одной из следующих частей статьи);
- Clipboard Ring — представляет собой временное (на период разработки приложения) хранилище, куда можно помещать фрагменты кода. Эта вкладка видна только в режиме редактирования кода.
Использование интерфейсных элементов
Создание интерфейсной части приложения начинается с того, что мы перетаскиваем с палитры компонентов необходимые нам интерфейсные элементы. В таблице представлены основные категории интерфейсных элементов, располагающихся в палитре компонентов на вкладке Windows Forms.
Интерфейсные элементы
Как работает программа? Как компилируется код? (устройство компьютерных программ) [2020]
DateTimePicker, MonthCalendar
При перетаскивании любого компонента с палитры на форму его свойства и события становятся доступными через окно редактирования свойств — окно Properties. Рассмотрим следующий пример. Допустим, что мы хотим создать программу, позволяющую просматривать графические файлы. Для этого нам потребуются следующие компоненты:
- компонент Button, который мы будем использовать для открытия диалоговой панели для выбора файлов;
- компонент OpenFileDialog, который будет использоваться для выбора графического файла;
- компонент PictureBox, в котором мы будем отображать содержимое графического файла.
Перенесем эти компоненты с палитры компонентов на форму. Обратите внимание на то, что компонент OpenFileDialog не отображается на самой форме, а присутствует в специальной панели, предназначенной для компонентов, которые не имеют визуального представления в режиме дизайна или вообще не являются визуальными.
Следующий шаг — это изменение некоторых свойств компонентов. Начнем с формы и установим значение ее свойства Text равным Graphics View. Далее изменим значение свойства StartPosition на CenterScreen — в результате наше приложение всегда будет отображаться в середине экрана. Если мы хотим, чтобы размер нашего окна нельзя было изменить, мы должны установить значение FormBorderStyle равным FixedSingle или Fixed3D. В противном случае при изменении размера окна нарушится расположение элементов внутри него.
Внутри окна находятся два интерфейсных элемента — кнопка и элемент для отображения графики. У кнопки мы должны изменить свойство Text на Open. Для элемента PictureBox мы установим трехмерную рамку (BorderStyle = Fixed3D), а также изменим свойство Anchor — с его помощью мы укажем, как должны изменяться размеры элемента в зависимости от размеров окна.
Для компонента OpenFileDialog мы изменим следующие свойства:
Filter | Graphics / *.bmp |
Title | Select Graphics File |
InitialDirectory | c: |
После того как мы установили основные свойства используемых нами компонентов, мы можем заняться написанием кода для обработчиков событий и кода, реализующего логику нашей программы.
Написание кода
Следуя логике нашей программы, каждое нажатие кнопки Open должно приводить к открытию диалоговой панели OpenFile. Выбор одного файла и нажатие кнопки Open в этой диалоговой панели вызывает отображение этого файла в компоненте PictureBox.
Пример разработки простейшего приложения типа Windows Forms на языке C++ в MS Visual Studio
В данной теме рассмотрен пример создания приложения расчета площади треугольника по формуле Герона. Приложение реализовано в системе Microsoft Visual Studio как Windows Forms Application .
В работе описывается программирование события клика на кнопке. Также рассматриваются особенности взаимодействия программного кода с компонентами Label (метка), Button (кнопка), Edit (строка ввода).
Поиск на других ресурсах:
Математическая постановка задачи
Заданы длины сторон треугольника a, b, c. Используя средства системы Microsoft Visual Studio разработать приложение, которое вычисляет площадь треугольника по формуле Герона. Приложение реализовать на языке C++ как Windows Forms Application .
Формула Герона для расчета площади треугольника:
где a, b, c– стороны треугольника; p– полупериметр, рассчитывается по формуле:
⇑
Выполнение
1. Запустить Microsoft Visual Studio . Создать проект.
Запустить MS Visual Studio . Создать проект как Windows Forms Application на базе шаблона Visual C++ . Пример создания проекта типа Windows Forms Application в C++ и типы создаваемых файлов приведен здесь.
Сохранить файл, задать ему произвольное имя (например « MyApp01 «).
В результате, будет создана главная форма приложения как изображено на рисунке 1.
По умолчанию, создается класс формы с именем Form1 . Ему отвечает файл с именем « Form1.h » (рисунок 1). Для того, чтобы перейти в режим просмотра кода файла « Form1.h » существует три способа:
– команда View -> Code (рисунок 2);
– команда « View Code » из контекстного меню, которое вызывается кликом на названии файла Form1.h в утилите Solution Explorer (рисунок 3);
– клик на соответствующей кнопке ( View Code или View Designer ) в Solution Explorer (рисунок 4).
Рис. 1. Главная форма приложения
Рис. 2. Команда Code с меню View
Рис 3. Вызов режима просмотра кода из контекстного меню
Рис 4. Вызов режима просмотра кода из Solution Explorer
В результате перехода в режим просмотра, откроется окно с текстом файла « Form1.h «.
Рисунок 5. Исходный код модуля формы « Form1.h «
Таким образом можно переходить между режимами проектирования ( Design ) и редактирования исходного кода ( Code ) проекта.
Класс формы содержит:
– конструктор Form1() ;
– деструктор Form1() ;
– метод InitializeComponent() , в котором можно реализовать начальную инициализацию внутренних переменных.
2. Размещение компонент на форме.
Для работы программы нужно разместить соответствующие компоненты на форме. Чтобы размещать компоненты, нужно перейти в режим проектирования ( Design ) одним из вышеописанных способов.
Компоненты находятся на панели инструментов Toolbox (рисунок 6).
Рис. 6. Палитра инструментов Toolbox
В нашем случае размещаются следующие компоненты:
– три компонента типа Label (метка) (рисунок 7). Предназначены для вывода информационных сообщений « a = «, « b = «, « c = «. В результате создается три экземпляра (объекта) с именами label1 , label2 , label3 ;
– три компонента типа TextBox (строка ввода) – для ввода значений переменных a, b, c(рисунок 8). Создается три объекта с именами textBox1, textBox2, textBox3;
– один компонент типа Button (кнопка) (рисунок 9). Предназначен для реализации команды вычисления площади и вызова соответствующего обработчика события. Создается экземпляр с именем button1;
– один компонент типа Label (рисунок 10). Предназначен для вывода результата (площадь треугольника). Создается объект с именем label4.
После размещения компонент форма будет иметь вид как показано на рисунке 10.
Рисунок 7. Компонент Label
Рисунок 8. Компонент TexbBox
Рисунок 9. Компонент Button
Рисунок 10. Компонент Label
3. Настройка свойств компонент.
Чтобы форма имела более наглядный для решения задачи вид, нужно настроить ее свойства а также свойства компонент размещенных на ней.
Для настройки свойств формы и компонент используется окно « Properties » (рисунок 11). Это окно вызывается командой
View->Properties Window
или клавишей F4.
Рис. 11. Окно « Properties » настройки свойств компонент
Для изменения названия формы (программы), нужно ее предварительно выделить (мышкой). После этого в заголовке окна « Properties » может появиться название формы Form1 . Следующим шагом нужно свойство Text установить в значение « Площадь треугольника » (рисунок 12).
Рис. 12. Настройка заголовка главной формы программы
Подобным образом настраиваются свойства компонент, размещенных на форме. Настроить такие свойства компонент:
– в компоненте label1 свойство Text = « a = «;
– в компоненте label2 свойство Text = « b = «;
– в компоненте label3 свойство Text = « c = «;
– в компоненте label4 свойство Text = « Площадь треугольника = «;
– в компоненте button1 свойство Text = « Вычислить «.
После выполненных действий, форма будет иметь вид, как изображено на рисунке 13.
Рис. 13. Вид формы после настройки компонент
4. Программирование события клика на кнопке button1.
Результатом работы программы есть вычисление площади треугольника. Вычисление происходит в момент когда пользователь делает клик на кнопке « Вычислить «. В результате формируется событие Click . В программе этому событию отвечает фрагмент программного кода, который называется обработчиком события (event handler). Этот фрагмент формируется средствами Microsoft Visual Studio .
Для того чтобы вызвать обработчик события клика на кнопке button1 , нужно выполнить следующие действия (рисунок 14):
– выделить компонент button1 ;
– в окне Properties активировать вкладку « Events » (события);
– в списке событий, в поле ввода события Click сделать двойной клик мышкой.
Рис. 14. Вызов обработчика события Click клика на кнопке button1
В результате выполненных действий, система Microsoft Visual Studio сформирует обработчик события и переключит окно в режим ввода программного кода.
Обработчик события (метод) имеет название button1_Click . Формируется следующий программный код:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)>
Между фигурными скобками нужно вписать собственный код вычисления площади треугольника по формуле Герона.
Листинг программного кода обработчика события button1_Click() следующий:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) < floata, b, c, p, s, t; a = System::Double::Parse(this->textBox1->Text); b = System::Double::Parse(this->textBox2->Text); c = c.Parse(this->textBox3->Text); p = (a + b + c)/2; t = p * (p-a) * (p-b) * (p-c); if(t<0) label4->Text = «Ошибка ввода данных!»; else< s = (float)Math::Sqrt(t); label4->Text = s.ToString(); > >
Объясним некоторые фрагменты кода.
Чтобы перевести значение компонента textBox1->Text из строки в соответствующей вещественный тип float используется метод Parse() из класса System::Double .
Чтобы занести в переменную aтипа float значение строки с textBox1->Text можно использовать один из двух способов:
a = System::Double::Parse(this->textBox1->Text);
a = a.Parse(this->textBox1->Text);
Указатель this есть указателем на данный класс (класс Form1 ).
Для вычисления квадратного корня используется функция Sqrt() из класса Math :
s = (float)Math::Sqrt(t);
Для преобразования из типа float в строчный ( string ) используется метод ToString() :
label4->Text = s.ToString();
5. Запуск проекта на выполнение.
Теперь можно запускать проект на выполнение (клавиша F5 ) и тестировать его работу.
Программирование: теория и практика
- C# (176)
- Практика (46)
- MS Visual Studio 2010 (34)
- MS Visual Studio 2017 (7)
- MS Visual Studio 2019 (13)
- ADO .NET (7)
- Практика (31)
- Borland C++ Builder 2007 (16)
- MS Visual Studio 2010 (18)
- Visual C++ (131)
- Практика (6)
- Теория (102)
- Практика (1)
- Теория (21)
- Практика (1)
- Теория (21)
- Практика (20)
- Delphi-7 (4)
- Embarcadero RAD Studio 2010 (18)
- Практика (4)
- Теория (92)
- SQL (4)
- C++. STL. Алгоритмы обрабатывающие последовательность в целом 23 мая, 2023
- C++. STL. Модифицирующие методы. Часть 4. Алгоритмы, извлекающие из последовательности отдельные элементы или группы элементов 5 мая, 2023
- C++. STL. Алгоритмы выполняющие замену элементов последовательности 31 марта, 2023
- C++. STL. Алгоритмы. Алгоритмы обмена значениями элементов последовательности 21 марта, 2023
- C++. STL. Алгоритмы. Алгоритмы, изменяющие все элементы последовательности 20 марта, 2023
- C++. STL. Алгоритмы для работы с множествами 15 марта, 2023
- C++. STL. Немодифицирующие алгоритмы 4 марта, 2023
- C++. STL. Алгоритмы, не изменяющие значения и порядок следования элементов 24 февраля, 2023
- C++. STL. Алгоритмы перестановок 19 февраля, 2023
- C++. STL. Алгоритмы определения минимума и максимума. Пример 15 февраля, 2023
При использовании материалов сайта, ссылка на сайт обязательна.
Источник: www.bestprog.net
«VBA Введение. 1.5. Архитектура ОС Windows 9x.»
ОС Windows для поддержки своей эффективности и целостности использует два режима: пользователя и ядра. Архитектура процессора Intel 80386 и следующих моделей определяет четыре уровня привилегий, называемых кольцами, для защиты кода и данных системы от случайного или преднамеренного изменения со стороны менее привилегированного кода. Такой метод выполнения кода называется моделью защиты Intel.
Уровень привилегий 0, известный как режим ядра, максимальный. Уровень привилегий 3, или режим пользователя, — минимальный. Когда код выполняется на некотором уровне привилегий, говорят, что он выполняется в соответствующем кольце. Операционные системы семейства Windows используют только кольца 0 и 3 (рис. 1.2).
Режим ядра
Режим ядра (кольцо 0) — это наиболее привилегированный режим. Работая в нем, код имеет прямой доступ ко всей аппаратуре и всему адресному пространству.
Программное обеспечение, выполняющееся в режиме ядра:
Рис. 1.2 Кольца 0 и 3 в модели защиты Intel
имеет прямой доступ к аппаратному обеспечению;
имеет доступ ко всей памяти компьютера;
не может быть вытеснено в страничный файл на жестком диске;
выполняется с большим приоритетом, чем процессы режима пользователя.
В частности, в кольце 0 выполняется код ядра операционных систем Windows 95 и Windows NT. Поскольку компоненты режима ядра защищены архитектурно, процессор предотвращает их изменение другой программой. Хотя кольцо 0 предоставляет максимальную защиту, не следует запускать в кольце 0 что попало — ведь компоненты этого режима имеют доступ ко всей системе. Если программный компонент в режиме ядра потерпит крах, это может разрушить всю систему.
Поскольку одна из задач Windows 95 — максимальная обратная совместимость, многие старые 16-разрядные драйверы и приложения используют прямой доступ к аппаратуре. Windows NT не предоставляет таким приложениям требуемый уровень доступа, поэтому зачастую они не могут работать под управлением Windows NT Workstation и Windows NT Server.
Режим пользователя
Режим пользователя предоставляет меньше привилегий, нежели режим ядра, — в частности, он не обеспечивает прямой доступ к аппаратуре. Код, выполняющийся в кольце 3, ограничен выделенным ему адресным пространством, а для вызова системных сервисов использует интерфейс прикладного программирования (API) Windows.
Процессы режима пользователя характеризуются следующими особенностями.
Не имеют прямого доступа к аппаратуре.
Это защищает систему от неисправных приложений или неавторизованного доступа.
Ограничены выделенным им адресным пространством.
Таким образом операционная система обеспечивает свою целостность. Процессу выделяется определенная область адресов и запрещено выходить за эту область.
Могут быть вытеснены из физической памяти в виртуальную память на жестком диске.
Механизм виртуальной памяти позволяет использовать пространство на жестком диске как дополнительное ОЗУ. О виртуальной памяти подробно рассказано чуть позже в этой главе.
Выполняются с меньшим приоритетом, чем компоненты режима ядра.
Поскольку приоритет процессов режима пользователя ниже, они получают меньший доступ к процессору, чем процессы режима ядра. Это гарантирует, что операционная система не будет ожидать окончания работы такого процесса. Кроме того, неисправный программный компонент, выполняющийся в режиме пользователя, не вызовет крах всей системы и не повлияет на другие приложения, работающие параллельно.
Многозадачность
Многозадачность — способность операционной системы выполнять более одной программы (задачи) одновременно. Противоположный подход — однозаачность, когда один процесс должен быть завершен прежде, чем сможет начаться другой. MS-DOS — пример однозадачной среды, a Windows 95 и Windows NT — многозадачные среды.
Конечно же, и в многозадачной системе программы не выполняются одновременно — процессор переключается между ними. Благодаря этому Вы можете выполнить запрос к базе данных и продолжить работу с редактором текстов до тех пор, пока не появятся результаты запроса. Многозадачность, кроме того, позволяет компьютеру эффективно использовать время, которое иначе было бы потеряно в ожидании команды пользователя или ответа устройств ввода/вывода.
Для понимания многозадачности необходимо сначала познакомиться с процессами и потоками.
Процессы и потоки
Приложение, разработанное для Windows, состоит из одного или более процессов (рис. 1.3). Процесс — это, попросту говоря, выполняемая программа. Ему принадлежат адресное пространство и выделенные ресурсы, а также один или более потоков, выполняющихся в его контексте.
Рис. 1.3 Приоритеты потоков
Поток- это основная единица, которой операционная система выделяет процессорное время, и минимальный «квант» кода, который может быть запланирован для выполнения. Кроме того, это часть процесса, выполняющаяся в каждый момент времени. Поток работает в адресном пространстве процесса и использует ресурсы, выделенные процессу.
Любой процесс содержит хотя бы один поток. Каждый процесс 16-разрядного Windows-приложения или программы MS-DOS имеет только один поток, тогда как процессы 32-разрядных Windows-приложений могут включать их несколько.
Примечание Ресурсами владеют процессы, а не потоки — последние только используют ресурсы, выделенные процессу. Например, если программа запросит порт, им будет управлять процесс. Любой поток процесса может обратиться к порту, но ни один из них не вправе самостоятельно запросить использование порта.
Вытесняющая и кооперативная многозадачность
Существуют два типа многозадачности: кооперативная (не вытесняющая) и вытесняющая (рис. 1.4). В кооперативной многозадачной среде (например, Windows 3.1) контроль над процессором никогда не отбирается у задачи — приложение должно самостоятельно отказаться от контроля над процессором, чтобы другое приложение заработало.
Вытесняющая многозадачность отличается от кооперативной тем, что операционная система может получить контроль над процессором без согласия выполняющегося приложения. Лишение приложения контроля над процессором называется вытеснением. Windows 95 и Windows NT используют вытесняющую многозадачность для MS-DOS и 32-разрядных Windows-приложений.
Разработчики программ, выполняющихся под управлением кооперативной операционной системы, должны учитывать необходимость частого возврата управления процессором операционной системе. Программа, которая недостаточно часто отдает управление, блокирует кооперативную операционную систему.
Рис.1.4 Вытесняющая и кооперативная многозадачность
Windows NT применяет вытесняющую многозадачность при выполнении 16-разрядных приложений Windows и MS-DOS. Windows NT обеспечивает полную защиту памяти 16-разрядных приложений, так как каждое из них выполняется в рамках собственной виртуальной машины. Windows 95, напротив, использует кооперативную многозадачность для всех 16-разрядных приложений — это необходимо для сохранения совместимости с 16-разрядными Windows-программами, которые сами контролируют свое выполнение.
Планирование
Рис. 1.5 Процесс планирования
С помощью планирования операционная система определяет, какой поток использует процессор в данный момент времени. Windows реализует многозадачность, присваивая каждому потоку приоритет, что позволяет ему использовать ресурсы системы. Планирование основано на заранее заданной единице времени, называемой квантом.
Фактическая продолжительность кванта времени зависит от конфигурации системы. Уровни приоритета находятся в диапазоне от 0 (наименьший приоритет) до 31 (наибольший приоритет). Поток с наибольшим приоритетом получает процессор в свое распоряжение (рис. 1.5).
Приоритет каждого потока определяется по:
классу приоритета процесса, которому принадлежит поток;
уровню приоритета потока внутри класса приоритета его процесса.
Классы приоритетов
Класс приоритета процесса и уровень приоритета потока определяют базовый приоритет потока. Уровни приоритетов Windows разделены на два класса:
реального времени (приоритеты от 16 до 31) — используется для выполнения основных функций операционной системы и обычно не применяется для приложений;
переменного приоритета (приоритет от 0 до 15) — определяет процессорный приоритет приложений; приоритет 0 возможен только для бесстраничного системного потока.
Уровни приоритетов
Процессам могут быть присвоены следующие базовые уровни приоритетов:
низкий — запускает приложения с уровнем приоритета 4;
обычный — запускает приложения с уровнем приоритета 7;
высокий — запускает приложения с уровнем приоритета 13;
реального времени — запускает приложения с уровнем приоритета 24.
Примечание Не запускайте приложения с классом приоритета реального времени — это может привести к нестабильности в работе операционной системы.
Управление памятью
Рис. 1.6 Выделение виртуальной памяти приложениям
В Windows 95 и NT каждый процесс имеет собственное адресное пространство, что позволяет адресовать до 4 Гб памяти. Отметим, что Windows выделяет процессу 4 Гб адресов памяти, а не физического ОЗУ. Физическая память ограничена имеющимися системными ресурсами (ОЗУ и дисковое пространство). Windows выделяет каждому приложению 2 Гб адресов памяти, а другие 2 Гб резервируются для нужд ядра.
Большинство компьютеров не располагают 4 Гб ОЗУ, и по этой причине Windows использует механизм виртуальной памяти. Таким образом, Windows может перенести часть содержимого физической памяти на жесткий диск, когда объем доступного ОЗУ будет исчерпан. Этот процесс известен как подкачка (рис. 1.6).
Виртуальные адреса, используемые процессом, не совпадают с адресами физической памяти. Для каждого процесса ядро поддерживает так называемую таблицу страниц — внутреннюю структуру, которая позволяет преобразовать виртуальные адреса в физические.
Виртуальная память
Процессоры Intel, начиная с модели 80386, позволяют отобразить область физической памяти на любую область 32-разрядных адресов. Виртуальная память Windows использует этот механизм для того, чтобы любая программа вела себя так, будто она имеет собственное физическое ОЗУ.
Windows для доступа к памяти применяет 32-разрядную линейную адресацию: приложения обращаются к памяти с помощью 32-разрядных адресов. Каждая программа имеет собственное виртуальное адресное пространство, которое диспетчер виртуальной памяти преобразует в адреса физического ОЗУ или в файле на жестком диске.
Постраничная подкачка
Физическое и виртуальное (логическое) адресное пространство каждого процесса разделено на страницы — «кванты» памяти, размер которых зависит от компьютера. Например, для компьютеров х86 размер страницы составляет 4 кб. Ядро может перемещать страницы памяти в страничный файл на диске (Pagefile.sys) и обратно: таким образом, управление памятью становится более гибким.
Когда страница перемещается в физическую память, ядро обновляет таблицы страниц соответствующих процессов. Если ядру требуется место в физической памяти, оно вытесняет самые старые страницы физической памяти в страничный файл. Манипуляции ядра с физической памятью совершенно незаметны (прозрачны) для приложений, которые работают только со своими виртуальными адресными пространствами.
Выполнение приложений
Windows 95 и Windows NT по-разному выполняют приложения, особенно 16-разрядные.
Механизм сообщений Windows
Рис.1.7 Очереди сообщении
В отличие от MS-DOS, Windows для управления приложениями использует модель сообщений. Сообщение генерируется всякий раз, когда происходит какое-то событие, например пользователь нажимает и отпускает клавишу на клавиатуре или передвигает мышь. Сообщение помещается в так называемую очередь сообщений. Активное приложение постоянно проверяет свою очередь и извлекает из нее поступившие сообщения.
Обмен сообщениями в 16-разрядных версиях Windows
В Windows 3.1 очередь сообщений операционной системы — единая. Она обслуживает все 16-разрядные Windows-приложения, которые проверяют ее и извлекают адресованные им сообщения. Такое решение не лишено недостатков — например, если у какого-то приложения возникнут проблемы, оно может не позволить другим приложениям проверить очередь сообщений. В этом случае последние прекратят работу, пока не получат управление и не смогут проверить наличие адресованных им сообщений.
Обмен сообщениями в Windows 95
В Windows 95 проблемы единой очереди сообщений разрешены: у каждого выполняющегося Win32-пpилoжeния — своя очередь. Каждый поток в Win32-пpилoжe-нии имеет собственную очередь сообщений и, значит, никак не влияет на поведение других работающих приложений. Если Winl6- или Win32-пpилoжeниe потерпит крах, остальные Win32-пpилoжeния будут действовать на основе вытесняющей многозадачности и смогут принимать поступающие сообщения из своих очередей.
Тем не менее в целях совместимости все 16-разрядные Windows-приложения под управлением Windows 95 используют общую очередь сообщений. Очевидно, если с одним из них что-то произойдет, остальным будет перекрыт доступ к очереди до тех пор, пока программа, вызвавшая проблему, не будет завершена.
Виртуальные машины
Рис. 1.8 Виртуальные машины
Windows NT выполняет приложения в рамках виртуальных машин (Virtual Machine, VM). Фактически VM — это создаваемая операционной системой среда для выполнения приложения, которая полностью эмулирует все ресурсы компьютера. С точки зрения приложения, виртуальная машина — это полноценный компьютер, предоставляющий ему все имеющиеся ресурсы.
Каждое 16-разрядное Windows- и MS-DOS-приложение под управлением Windows NT выполняется в отдельном адресном пространстве, называемом виртуальной DOS-машиной (Virtual DOS Machine, VDM). При этом обеспечивается защита программы, a Windows NT может реализовать вытесняющую многозадачность для всех сервисов операционной системы и приложений.
В Windows 95 предусмотрено выполнение MS-DOS-приложений в отдельных VDM, однако, поскольку часть памяти доступна всем виртуальным машинам, MS-DOS-приложения представляют собой потенциальную угрозу стабильности системы.
Драйверы устройств в Windows
Драйвер устройства- это программный компонент, получающий команды от операционной системы и преобразующий их в команды конкретного устройства (рис. 1.9). Зачастую драйверы разрабатываются производителями аппаратного обеспечения, и компания Microsoft их напрямую не поддерживает.
Рис. 1.9 Архитектура драйверов устройств
Драйверы устройств позволяют разработчикам создавать аппаратно-незави-симые приложения. Другими словами, разработчику на стадии создания приложения не нужно заботиться о том, какую именно аппаратуру будет применять пользователь. Пользователь, в свою очередь, может корректировать конфигурацию компьютера, не затрагивая работоспособность приложений. Windows использует драйверы для таких компонентов, как:
звуковые карты;
устройства связи;
сетевые адаптеры.
В зависимости от того, для какой операционной системы семейства Windows разработан драйвер, он может принадлежать к одной из двух групп: защищенного режима и реального режима.
Драйверы защищенного и реального режима
Драйверы реального режима созданы для работы в реальном режиме операционной системы MS-DOS. Они не так безопасны и устойчивы, как драйверы защищенного режима, которые используют преимущества архитектуры защищенного режима процессоров 80386 и последующих моделей. Драйвер защищенного режима или драйвер виртуального устройства (Virtual Device Driver, VxD) обеспечивает быстрый разделяемый доступ к устройству. Кроме того, операционные системы семейства Windows выполняют 32-разрядный код защищенного режима более эффективно, чем 16-разрядный код реального режима.
Windows 95 поддерживает оба типа драйверов, a Windows NT — только драйверы защищенного режима. Компания Microsoft настоятельно рекомендует применять 32-разрядные драйверы защищенного режима везде, где возможно.
32- и 16-разрядные компоненты
В Windows 95 включены 16-разрядные версии User, GDI и Kernel. Комбинация 16-разрядного и 32-разрядного кода позволяет сохранить совместимость с существующими приложениями и драйверами и одновременно увеличить производительность системы по сравнению с Windows 3.1. Windows 95 использует 32-разрядный код везде, где это увеличивает производительность не в ущерб совместимости. Для включения в Windows 95 16-разрядных компонентов есть три основные причины:
код для 16-разрядных систем обеспечивает обратную совместимость с приложениями и драйверами, разработанными для Windows 3.1;
в некоторых случаях 16-разрядный код выполняется быстрее, чем аналогичный 32-разрядный;
32-разрядный код требует больше памяти, чем эквивалентный 16-разрядный.
Одна из основных задач Windows 95 — эффективная работа на компьютерах с ограниченным объемом ОЗУ, и применение 16-разрядного кода способствует решению этой задачи.
Подсистемы ввода/вывода и драйверы устройств, включая сетевые и файловые системы, являются полностью 32-разрядными, как и все компоненты управления памятью и планирования. Часто возникающая при этом проблема вызова 32-разрядной функции из 16-разрядного приложения (или наоборот) решается при помощи шлюзования.
Шлюзование
Эта операция выполняется, когда операционная система преобразует вызов 16-разрядной функции в вызов 32-разрядной. Процессы Windows 95 и Windows NT не могут содержать одновременно и 16-разрядный, и 32-разрядный код. Шлюз позволяет коду с одной стороны границы вызывать код с другой ее стороны. Каждая платформа использует один или несколько механизмов шлюзования:
механизм базовых шлюзов позволяет 16-разрядному Windows-приложению в системе под управлением Windows 95 и Windows NT загрузить и вызвать 32-разрядную библиотеку;
с помощью механизма плоских шлюзов, реализованного только в Windows NT, Win32-пpилoжeниe загружает и вызывает 16-разрядную библиотеку и наоборот.
Источник: www.mini-soft.ru