- •0915 “Компьютерная инженерия”специальностей:
- •7.091501 "Компьютерные системы и сети"
- •7.091502 "Системное программирование
- •Оглавление
- •Общие положения
- •1. Получение и вывод информации о вычислительной системе
- •1. Получение и вывод информации о вычислительной системе
- •1.1. Цель работы
- •1.2. Указания по подготовке к выполнению лабораторной работы
- •1. 3. Обзор темы работы
- •Функции и структуры для получения информации о вычислительной системе
- •1.4. Задание на лабораторную работу
- •Контрольные вопросы и задания
- •2. Графический интерфейс пользователя (graphical user interface, gui)
- •2.1. Цель работы
- •2. 2. Указания по подготовке к выполнению лабораторной работы
- •2.3. Обзор темы работы
- •2 .4. Задание на лабораторную работу
- •2.5. Контрольные вопросы и задания
- •3. Программирование интерфейса пользователя и эвм
- •3.1. Цель работы
- •3. 2. Указания по подготовке к выполнению лабораторной работы
- •3. 3. Обзор темы работы
- •Поток необработанного ввода
- •Фрагмент примера для организации работы с клавиатурой
- •3.4. Задание на лабораторную работу
- •3.5. Контрольные вопросы и задания
- •4. Многозадачность и многопоточность
- •4. 1. Цель работы
- •4.2. Указания по подготовке к выполнению лабораторной работы
- •4.3. Обзор темы работы
- •4.4. Задание на лабораторную работу
- •5.5. Контрольные вопросы и задания
- •Список литературы
3.5. Контрольные вопросы и задания
Какие средства ввода информации Вы знаете?
Дайте определение таким понятием как «каретка» и «курсор»?
Чем отличаются аппаратные (keystrokes) и символьные (characters) сообщения?
Какие сообщения от клавиатуры обрабатываются оконной процедурой?
Перечислите сообщения, поступающие от мыши.
Что такое «фокус ввода»?
Как вы думаете, можно ли получить сообщения от мыши, если курсор находится за пределами окна?
Как рисовать за пределами окна приложения?
Как обрабатываются нажатия кнопки в рабочей области окна, созданной функцией CreateWindow?
Каким образом можно получить информацию о наличии мыши в системе и ее характеристики?
4. Многозадачность и многопоточность
4. 1. Цель работы
Ознакомление с концепцией многозадачности и многопоточности современных операционных систем, получение практических навыков по составлению, написанию и отладке программ, содержащих параллельно функционирующие процедуры и функции.
4.2. Указания по подготовке к выполнению лабораторной работы
Многозадачность на сегодняшний день - одна из определяющих особенностей операционных систем. При подготовке к лабораторной работе необходимо ознакомится с теоретическим описанием принципа многозадачности и особенностями ее аппаратной реализации. Внимательно проработать вопросы обеспечения многозадачности (multitasking) и многопоточности (multithreading) приложений Windows.
При подготовке к работе необходимо изучить конспект лекций по указанной теме, методические указания, а также разделы, указанные в [16, c.763-809], [17, c.59-87].
4.3. Обзор темы работы
Многозадачность (multitasking) - это способность операционной системы выполнять несколько программ одновременно. В основе этого принципа лежит использование операционной системой аппаратного таймера для выделения отрезков времени для каждого из одновременно выполняемых процессов. Если эти отрезки времени достаточно малы, и машина не перегружена слишком большим числом программ, то пользователю кажется, что все эти программы выполняются параллельно.
Многопоточность - это возможность программы самой быть многозадачной. Программа может быть разделена на отдельные потоки выполнения, которые, как кажется, выполняются параллельно.
В лабораторной работе изучаются функции порождения и завершения процесса CreateProcess, ExitProcess, TerminateProcess, создания и завершения потока CreateThread, ExitThread.
Особое внимание в лабораторной работе уделяется исследованию возможностей синхронизации процессов и потоков. Существует большой класс задач (например, в управлении базами данных, параллельных вычислениях), в которых параллельно функционирующие программы (или их модули) нуждаются в обмене информации или порядок выполнения одних из программных модулей зависит от выполнения других.
Windows предоставляет две специальные возможности синхронизировать параллельно выполняемые задачи - это семафоры и события.
Семафор действует как обычных флаг, и используется для того, чтобы определить свободен или нет в настоящее время требующийся потоку или процессу ресурс. Пользователь может определять для семафора количество ресурсов, доступных для использования параллельными задачами. При занятии потоком какого-либо количества свободных ресурсов происходит декрементация количества ресурсов, и если, оставшееся число ресурсов недостаточно следующему потоку, он приостанавливается до момента освобождения необходимого числа ресурсов. Для управления семафорами используются функции CreateSemaphore, ReleaseSemaphore, OpenSemaphore, WaitForSingleObject.
События являются самой примитивной разновидностью объектов синхронизации. Они используются для того, чтобы уведомить поток о том, что наступило ожидаемое событие. Эти объекты обычно используются для того, чтобы синхронизировать потоки, которые работают по принципу конвейера. Например, один поток опрашивает датчики и загружает считанные значения в буфер. Другой поток считывает эти данные из буфера и производит их обработку. Первый поток может сигнализировать второму о том, что событие - заполнение буфера - наступило. Второй поток может сигнализировать первому о том, что наступило другое событие - данные из буфера считаны, ожидается новая порция данных. Событие может иметь два состояния - занятое и свободное. Работа с событиями осуществляется посредством следующих функций: CreateEvent, ResetEvent, PulseEvent, SetEvent.
