Проблемы синхронизации потоков
В классе TTread не зря введен метод синхронизации потоков. Он необходим, чтобы как-то блокировать неприятные ситуации, которые могут случиться. Следует отметить, что в примерах выше имеются дополнительные трудности, связанные с использованием бесконечно работающих потоков (бесконечные циклы). Поэтому даже в случае двух потоков стандартные методы синхронизации иногда не справляются.
Если в процессе работает несколько потоков, то можно ожидать две основные неприятности: тупики и гонки. Тупики возникают, когда два или более потоков ожидают один и тот же ресурс и блокируют друг друга, так как не прописан механизм, какой поток должен в такой ситуации получить нужный ресурс. Гонки возникают, когда два или более потоков используют один и тот же ресурс и изменяют его в непредусмотренном порядке, поскольку операционная система может поменять очередность работы потоков. Для разрешения указанных ситуаций и некоторых других разрабатываются дополнительные механизмы синхронизации: функции ожидания и объекты синхронизации.
Среди функций чаще всего используются WaitForSingleObject и WaitForMultipleObjects (функции Windows API). Среди объектов выделяются Critical Section (критическая секция), Event (событие), Mutex (взаимное исключение), Semaphore(семафор), Timer (таймер). В различных случаях выбирается свой вариант.
СПИСОК ИСПОЛЬЗУЕМЫХ В ПРИМЕРАХ КОМПОНЕНТОВ
В табл. 17 приводится перечень используемых компонентов, которые понадобились при решении примеров.
Таблица 17
Список используемых компонентов и других классов
Пример | Компоненты |
Пример 1 | TButton, TLabel, TEdit |
Пример 2 | TPanel, TBitBtn |
Пример 3 | TBevel |
Пример 4 | TImage |
Пример 5 | TListBox |
Пример 6 | TMemo |
Пример 7 | TComboBox |
Пример 8 | TStringGrid |
Пример 9 | TRadioGroup, TRadioButton |
Пример 10 | TCheckBox, TDrawGrid |
Пример 12 | TTabControl |
Пример 13 | TPageControl, TSpinEdit |
Пример 14 | TTimer |
Пример 17 | TMainMenu |
Примеры 18 | TListView |
Пример 19 | TColorBox, TList |
Пример 20 | Проект с двумя формами |
Пример 21 | TChart, TFileStream, TOpenDialog, TSaveDialog |
Пример 22 | TMemoryStream |
Пример 24 | TActionList, TCoolBar, TToolBar, TSplitter |
Пример 27 | TThread |
Пример 28 | TProgressBar, TTrackBar |
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Тодд Миллер, Дэвид Пауэл и др. Использование Delphi 3. – Киев, Москва: ”Диалектика”, 1997,768 с.
2. Марко Кэнту. Delphi 4. – Москва, Харьков, Минск, Санкт-Петербург: “Питер”, 1999, 1114 с.
3. Федоров А. Delphi 2.0 для всех. – М.: “КомпьютерПресс”, 1997, 464 с.
4. Гофман В., Хомоненко А. Delphi 6. – Дюссельдорф, Москва, Киев, Санкт-Петербург: “БХВ - Петербург”, 2001, 1152 с.
5. Дарахвелидзе П., Марков Е. Программирование в Delphi 7. – Санкт-Петербург: “БХВ-Петербург”, 2003, 784 с.
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ.. 3
ОСНОВЫ DELPHI. 5
ОБЩАЯ ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ.. 5
ЯЗЫК ПРОГРАММИРОВАНИЯ.. 7
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ.. 7
ВИЗУАЛЬНОЕ ПРОГРАММИРОВАНИЕ.. 8
СОБЫТИЙНО УПРАВЛЯЕМОЕ ПРОГРАММИРОВАНИЕ.. 9
WINDOWS-ПРИЛОЖЕНИЕ.. 11
СРЕДА ПРОГРАММИРОВАНИЯ.. 12
ПЕРВОНАЧАЛЬНЫЕ СВЕДЕНИЯ О ПРОЕКТЕ ПРИЛОЖЕНИЯ.. 15
ВСТРОЕННЫЙ ОТЛАДЧИК.. 17
ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ КЛАССОВ.. 17
ИЕРАРХИЯ КЛАССОВ.. 17
ИСПОЛЬЗОВАНИЕ ПАЛИТРЫ КОМПОНЕНТОВ И ИНСПЕКТОРА ОБЪЕКТОВ 20
ИСПОЛЬЗОВАНИЕ ГРАФИКИ.. 21
ОСНОВНЫЕ ИНСТРУМЕНТЫ... 22
ГРАФИЧЕСКИЕ ДАННЫЕ И ПАЛИТРА.. 23
НЕКОТОРЫЕ ОБЩИЕ СВОЙСТВА КОМПОНЕНТОВ.. 26
СОХРАНЕНИЕ ПРОЕКТА.. 27
ПОСТРОЕНИЕ ПРОСТЕЙШЕГО ПРОЕКТА.. 28
ПОНЯТИЕ ИСКЛЮЧИТЕЛЬНОЙ СИТУАЦИИ.. 30
ВВЕДЕНИЕ В OBJECT PASCAL.. 31
СТРУКТУРА ПРИЛОЖЕНИЯ.. 32
СТРУКТУРА ПРОГРАММЫ-ПРОЕКТА.. 33
СТРУКТУРА МОДУЛЯ.. 33
ПРИМЕР 1. 36
ОПИСАНИЯ ПРОГРАММНЫХ ЭЛЕМЕНТОВ.. 40
ПРОГРАММНЫЕ ЭЛЕМЕНТЫ И АДРЕСА ПАМЯТИ.. 41
ОБЛАСТИ ВИДИМОСТИ.. 41
ПРАВИЛА ЗАПИСИ ИМЕН.. 42
ВРЕМЯ ЖИЗНИ ИДЕНТИФИКАТОРОВ.. 42
ИСПОЛЬЗОВАНИЕ ЛОКАЛЬНЫХ ПЕРЕМЕННЫХ В ПРИМЕРЕ 1. 42
ИСПОЛЬЗОВАНИЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ В ПРИМЕРЕ 1. 43
ТИПЫ... 44
ПРОСТЫЕ ТИПЫ... 45
ЦЕЛЫЕ ТИПЫ... 46
СИМВОЛЬНЫЕ ТИПЫ... 48
ЛОГИЧЕСКИЕ ТИПЫ... 48
ТИП ПЕРЕЧЕНЬ.. 49
ИНТЕРВАЛЬНЫЙ ТИП.. 50
ВЕЩЕСТВЕННЫЙ ТИП.. 50
ТИП ДАТА-ВРЕМЯ.. 52
ВЫРАЖЕНИЯ.. 53
КОНСТАНТЫ... 53
ТИПИЗИРОВАННЫЕ КОНСТАНТЫ. 53
ПЕРЕМЕННЫЕ.. 54
ОПЕРАЦИИ.. 54
ФУНКЦИИ.. 57
ПОРЯДОК ВЫЧИСЛЕНИЯ ВЫРАЖЕНИЙ.. 57
ВИДЫ ОПЕРАТОРОВ.. 57
ПРОСТЫЕ ОПЕРАТОРЫ... 58
СОСТАВНОЙ ОПЕРАТОР. 59
ОПЕРАТОРЫ УСЛОВНОГО ПЕРЕХОДА.. 60
ОПЕРАТОР IF. 60
ПРИМЕР 2. 60
ОПЕРАТОР CASE.. 64
ПРИМЕР 3. 64
ИСПОЛЬЗОВАНИЕ ENTER В ПРИМЕРЕ 3. 69
ОПЕРАТОРЫ ЦИКЛА.. 70
ОПЕРАТОР ЦИКЛА FOR.. 71
ПРИМЕР 4. 72
ОПЕРАТОР ЦИКЛА WHILE.. 77
ПРИМЕР 5. 77
ОПЕРАТОР ЦИКЛА REPEAT. 80
ПРИМЕР 6. 81
ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР BREAK И CONTINUE.. 85
ПРИМЕР 7. 85
МАССИВЫ... 88
СТАТИЧЕСКИЕ МАССИВЫ... 88
ДИНАМИЧЕСКИЕ МАССИВЫ... 90
ПРИМЕР 8. 92
СТРОКИ.. 94
ПРИМЕР 9. 96
ЗАПИСИ (ОБЪЕДИНЕНИЯ) 101
ОПЕРАТОР WITH.. 103
ПРИМЕР 10. 103
СОВМЕСТИМОСТЬ И ПРЕОБРАЗОВАНИЕ ТИПОВ ДАННЫХ.. 112
ИДЕНТИЧНОСТЬ ТИПОВ.. 112
СОВМЕСТИМОСТЬ ТИПОВ.. 113
СОВМЕСТИМОСТЬ ПО ПРИСВАИВАНИЮ... 113
ПРЕОБРАЗОВАНИЕ ТИПОВ.. 114
ОПЕРАТОРЫ ОБРАБОТКИ ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ.. 114
ПРИМЕР 11. 117
МНОЖЕСТВА.. 120
ОПЕРАЦИИ НАД МНОЖЕСТВАМИ.. 121
ПРИМЕР 12. 123
ВАРИАНТНЫЙ ТИП ДАННЫХ.. 127
ПРОЦЕДУРЫ И ФУНКЦИИ.. 129
ПРОЦЕДУРА.. 130
ФУНКЦИЯ.. 131
РЕКУРСИЯ.. 133
ФОРМАЛЬНЫЕ И ФАКТИЧЕСКИЕ ПАРАМЕТРЫ... 133
ПАРАМЕТРЫ-ЗНАЧЕНИЯ.. 134
ПАРАМЕТРЫ-ПЕРЕМЕННЫЕ.. 134
ПАРАМЕТРЫ-КОНСТАНТЫ... 135
ПАРАМЕТРЫ БЕЗ ТИПА.. 135
МАССИВЫ ОТКРЫТОГО ТИПА.. 136
ПАРАМЕРЫ ПО УМОЛЧАНИЮ... 137
ПРОЦЕДУРА EXIT.. 138
ДИРЕКТИВЫ ПОДПРОГРАММЫ... 138
СОГЛАШЕНИЯ ПО ПЕРЕДАЧЕ ДАННЫХ.. 139
ДИРЕКТИВА FORWARD.. 139
ДИРЕКТИВА EXTERNAL. 140
ДИРЕКТИВА ASSEMBLER.. 140
ПЕРЕГРУЖЕННЫЕ ПОДПРОГРАММЫ... 140
ПРИМЕР 13. 141
КЛАССЫ... 147
ИНКАПСУЛЯЦИЯ.. 147
КЛАСС КАК ОБЪЕКТНЫЙ ТИП.. 148
НАСЛЕДОВАНИЕ.. 149
ОБЛАСТИ ВИДИМОСТИ.. 149
ОПЕРАЦИИ IS И AS. 150
МЕТОДЫ... 150
ВИДЫ МЕТОДОВ.. 151
МЕТОДЫ VIRTUAL И ПОЛИМОРФИЗМ... 152
МЕТОДЫ DYNAMIC.. 154
МЕТОДЫ MESSAGE.. 154
МЕТОДЫ ABSTRACT.. 155
МЕТОДЫ OVERRIDE.. 155
МЕТОДЫ CLASS.. 155
ПРИМЕР 14. 156
ДИНАМИЧЕСКОЕ СОЗДАНИЕ КОМПОНЕНТОВ.. 156
ИСПОЛЬЗОВАНИЕ КЛАССА СО СЧЕТЧИКОМ ОБЪЕКТОВ.. 158
ОТСЛЕЖИВАНИЕ РАЗРУШЕНИЯ ОБЪЕКТОВ.. 160
СОБЫТИЯ.. 160
УКАЗАТЕЛИ НА МЕТОДЫ... 162
ПРИМЕР 15. 163
ТИПЫ ССЫЛКИ НА КЛАСС.. 166
СВОЙСТВА.. 166
СВОЙСТВА SIMPLE.. 167
СВОЙСТВА ENUMERATED.. 168
СВОЙСТВА SET.. 168
СВОЙСТВА OBJECT.. 169
СВОЙСТВА ARRAY.. 170
ЗАДАНИЕ НАЧАЛЬНЫХ ЗНАЧЕНИЙ СВОЙСТВАМ... 172
ПРИМЕР 16. 174
ФАЙЛОВЫЕ ТИПЫ... 179
ТЕКСТОВЫЕ ФАЙЛЫ... 180
ТИПИЗИРОВАННЫЕ ФАЙЛЫ... 182
ФАЙЛЫ БЕЗ ТИПА.. 183
ДОПОЛНИТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ.. 184
ПРИМЕР 17. 184
КОМПОНЕНТ TMAINMENU.. 185
УКАЗАТЕЛИ.. 192
ПРИМЕР 18. 195
ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ.. 198
ОДНОНАПРАВЛЕННЫЕ СПИСКИ.. 199
ДВУНАПРАВЛЕННЫЕ СПИСКИ.. 201
СТЕКИ, ОЧЕРЕДИ.. 202
БИНАРНЫЕ ДЕРЕВЬЯ.. 203
ПРИМЕР 19. 205
ПРОЦЕДУРНЫЙ ТИП.. 213
ПРОГРАММНЫЕ ЕДИНИЦЫ DLL.. 213
ПРИМЕР 20. 214
ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ.. 220
ПОТОКИ ДАННЫХ.. 220
ПРИМЕР 21. 221
ПРИМЕР 22. 228
ИНТЕРФЕЙС DRAG AND DROP. 232
ПРИМЕР 23. 233
ТЕХНОЛОГИЯ DRAG AND DOCK.. 237
ПРИМЕР 24. 239
ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ WINDOWS API ПРИ РАБОТЕ С ФАЙЛАМИ 260
ПРИМЕР 25. 264
ИСПОЛЬЗОВАНИЕ ОТОБРАЖАЕМЫХ ФАЙЛОВ.. 267
ПРИМЕР 26. 269
ПРОГРАММНЫЕ ПОТОКИ.. 274
ПРИОРИТЕТЫ ПОТОКОВ.. 275
КЛАСС TTHREAD.. 276
ПРИМЕР 27. 277
ИСПОЛЬЗОВАНИЕ БЛОКИРОВКИ В ПРИМЕРЕ 27. 280
МНОГОПОТОЧНОЕ ПРИЛОЖЕНИЕ В ПРИМЕРЕ 28. 282
ПРОБЛЕМЫ СИНХРОНИЗАЦИИ ПОТОКОВ.. 288
СПИСОК ИСПОЛЬЗУЕМЫХ В ПРИМЕРАХ КОМПОНЕНТОВ.. 290
БИБЛИОГРАФИЧЕСКИЙ СПИСОК.. 291
Основы программирования на Delphi.
Учебное пособие.
Составители: Емельянов Виктор Иванович
Воробьев Виктор Ильич
Тюрина Татьяна Петровна
Редактор Т.П. Бабокина
Лицензия ЛР № 020714 от 02.09.93
Подписано в печать Формат 60 256 1/16
Бумага типографская. Отпечатано на ризографе.
Усл. печ. л. 16,00. Уч. изд. л. 19,73. Тираж 100 экз.
Заказ
Российский химико – технологический университет им. Д.И.Менделеева, Новомосковский институт. Издательский центр.
Адрес института: 301670 Новомосковск Тульской области, Дружбы, 8.