Лабораторная работа №1
«Создание многопоточных приложений в ОС Windows»
Цель: Приобрести навыки написания простого многопоточного приложения в ОС Windows
Порядок выполнения работы:
1) Изучить методические указания к работе.
2) Создать многопоточное приложение, описанное в разделе «Пример создания многопоточного приложения в Delphi».
3) Изменить текст приложения в соответствии с вариантом задания к лабораторной работе.
4) Оформить отчет.
Содержание отчета:
Наименование и номер лабораторной работы.
Задание, согласно Вашему варианту.
Текст программы.
Результат работы программы.
Вывод на основании полученных результатов.
Теоретические положения:
Концепция потоков
Поток (thread)— это объект операционной системы, который представляет собой отдельный путь выполнения программы внутри определенного процесса. Каждое приложение Win32 имеет, по крайней мере, один поток, обычно называемыйпервичным, илиглавным, но приложения имеют право создавать дополнительные потоки, предназначенные для выполнения других задач.
С помощью потоков реализуются средства одновременного выполнения нескольких различных подпрограмм. Конечно, если компьютер оснащен только одним процессором, то о настоящей одновременности работы двух потоков говорить не приходится. Но когда для обработки каждого потока операционная система поочередно выделяет определенное время (измеряемое в мельчайших долях секунды), создается впечатление одновременной работы нескольких приложений.
Потоки никогда не поддерживались в среде 16-разрядной Windows. Это означает, что ни одна 32-разрядная программа Delphi, написанная с использованием потоков, никогда не будет совместимой с Delphi 1. Данный момент обязательно нужно учитывать при разработке приложений, предназначенных для работы на обеих платформах.
Типы многозадачности
Понятие потока во многом отличается от многозадачности, поддерживаемой в среде 16-разрядной Windows. Возможно, Вам приходилось слышать, что Win32 называют операционной системой с приоритетной (preemptive), иливытесняющей, многозадачностью, а Windows 3.1 — средой скооперативной многозадачностью (cooperative multitasking).
В чем же разница? В среде приоритетной многозадачности управление возложено на операционную систему — именно она отвечает за то, какой поток должен выполняться в данный момент времени (и обладать более высоким приоритетом). Когда первый поток приостанавливается системой ради передачи второму потоку нескольких циклов работы процессора, то о первом потоке говорят, что он выгружен. И если к тому же окажется, что первый поток выполняет бесконечный цикл, то, как правило, это не приводит к трагической ситуации, поскольку операционная система будет продолжать выделение процессорного времени для всех других потоков.
В среде Windows 3.1 ответственность за возвращение управления операционной системе по завершении выполнения приложения лежит целиком на разработчике. Поэтому, когда приложению не удается корректно завершить работу и вернуть управление операционной системе, кажется, что операционная система "зависает" — все хорошо знакомы с такой печальной ситуацией. Если вдуматься, то это может показаться даже забавным — устойчивость работы всей системы 16-разрядной Windows полностью зависит от поведения всех ее приложений, которые должны самостоятельно защитить себя от попадания в бесконечные циклы, замкнутую цепь рекурсии и другие неприятные ситуации. А поскольку все приложения для достижения корректной работы системы должны работать согласованно, этот тип многозадачности называетсякооперативным.