Работа №8. Отображаемые файлы




Работа №5. Запуск потоков функциями API

Разработать приложение, производящее вызов функций из трех различных плагинов одновременно в трех отдельных потоках. Эти три потока должны иметь одинаковый (общий) код, и запускаться функциями API CreateThread. Дополнительный параметр, передаваемый в эту функцию при создании потока, должен определять какой плагин будет вызываться в каждом из трех потоков.

В приложении также должен быть создан с использованием класса TThread дополнительный поток, который раз в секунду должен обновлять на экране скорость работы (вызовов плагинов в секунду) этих трех потоков. В приложении для этих трех потоков должна быть реализована возможность изменения их приоритета, в том числе и во время их выполнения.

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

Работа №6. Использование объектов синхронизации

Разработать приложение, в котором выполняется следующий алгоритм: два параллельных потока циклически выполняют вызов плагинов из библиотек dll (согласно варианта). Каждый поток использует свой плагин. Результаты работы каждый поток помещает в общую очередь конечной длины. Третий поток забирает из очереди результаты работы плагинов и отображает их на экране в произвольной форме. Схема взаимодействия потоков приведена на рисунке:

Очередь должна быть реализована с использованием двух объектов синхронизации Семафор (для потоков 1 и 2, и для потока 3). При заполнении очереди потоки 1 и 2 должны приостанавливаться функцией ожидания. При отсутствии результатов в очереди поток 3 также должен приостанавливаться функцией ожидания. Участок кода помещения результатов в очередь должен быть оформлен с использованием объекта синхронизации Критическая секция.

Потоки должны корректно завершаться при завершении приложения. Для этого в программе нужно предусмотреть объект синхронизации Событие, меняющий свое состояние при завершении приложения. В приложении должна быть предусмотрена возможность только однократного запуска через использование объекта синхронизации Мьютекс. В случае запуска второй копии программы должно выводиться соответствующее предупреждение.

Работа №7. Работа с файлами и временем функциями API

Модифицировать приложение их работы №1 следующим образом:

- в заголовке окна через отдельный поток должны отображаться текущее значение системного времени OC Windows и серийный номер диска, на котором установлена ОС;

- результаты работы плагинов должны сохраняться в текстовый файл, каждый раз в новую строку, добавляясь к уже записанным ранее;

- работа с этим текстовый файлом должна осуществляться с использованием только функций API;

- этот текстовый файл должен размещаться в папке, предназначенной для хранения временных файлов;

- в окне приложения разместить текстовый список (ListBox, Memo или StringGrid), содержащий список имён файлов и их размеров, которые содержатся в папке для хранения временных файлов, поиск файлов для этого списка должен быть реализован с использованием API функций FindFirstFile, FindNextFile, FindClose;

- этот список должен обновляться автоматически, отслеживая изменение состава файлов в папке и изменения размеров файлов;

- отслеживание изменений должно быть реализовано с использованием функций Find(First/Next/Close)ChangeNotification или ReadDirectoryChangesW.

Работа №8. Отображаемые файлы

Реализовать два приложения, взаимодействующие через общую область памяти. Первое должно после запуска создавать общую область памяти (проекцию файла подкачки) и ожидать поступления данных. Второе приложение, с графическим интерфейсом, должно обеспечивать ввод, вывод и передачу данных через общую область памяти. Подключение к существующей проекции файла подкачки во втором приложении должно осуществляться через функцию OpenFileMapping.

Алгоритм работы приложений:

- запустить первое приложение, которое переходит в режим ожидания (первое приложение может быть как консольным, так с графическим интерфейсом или вообще без окна);

- запустить второе приложение, которое запрашивает ввод данных;

- после ввода данные помещаются в общую область памяти, и первое приложение выполняет их обработку любым (одним) произвольным плагином из первой работы;

- результат обработки первым приложением также помещается в общую область памяти;

- второе приложение дожидается обработки данных и отображает результат, переходя затем опять в режим ввода новых данных;

- процесс обработки данных может повторяться произвольное число раз до завершения второго приложения;

- по завершении второго приложения, первое должно автоматически завершаться.

Синхронизацию между приложениями осуществлять через использование объектов синхронизации с именами (например, событий). Реализация работы должна позволять запускать произвольное число копий второго приложения. При этом вводить данные должно быть можно с любой копии, а результат обработки должен автоматически отображаться во всех запущенных копиях второго приложения (использовать PulseEvent).

Также во втором приложении разместить кнопку, в которой осуществить вызов любой произвольной функции API c ошибкой и отобразить текстовое описание данной ошибки с использованием функции FormatMessage. Выбор комбинации функции API и ошибки должен быть уникальным – не присутствовать в работах, сданных другими студентами.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: