Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Емельянов.doc
Скачиваний:
12
Добавлен:
03.11.2018
Размер:
3.25 Mб
Скачать

Проблемы синхронизации потоков

В классе TTread не зря введен метод синхронизации потоков. Он необ­ходим, чтобы как-то блокировать неприятные ситуации, которые могут слу­читься. Следует отметить, что в примерах, приведенных ранее, имеются до­полнительные трудности, связанные с использованием бесконечно рабо-

223

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

Если в процессе работает несколько потоков, то можно ожидать две ос­новные неприятности: тупики и гонки. Тупики возникают, когда два или более потоков ожидают один и тот же ресурс и блокируют друг друга, так как не указано, какой поток должен в такой ситуации получить нужный ре­сурс. Гонки возникают, когда два или более потоков используют один и тот же ресурс и изменяют его в непредусмотренном порядке, поскольку опера­ционная система может поменять очередность работы потоков. Для разре­шения указанных и некоторых других ситуаций разрабатываются дополни­тельные механизмы синхронизации: функции ожидания и объекты синхро­низации.

Среди функций чаще всего используются WaitForSingleObject и Wait-ForMultipleObjects (функции Windows API). Среди объектов выделяются Critical Section (критическая секция), Event (событие), Mutes (взаимное исключение), 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

ITabControl

. 13

TPageControl, TSpinEdit

14

TTimer

17

TMainMenu

18

TListView

19

TColorBox, TList

20

Проект с двумя формами

21

TChart, TFileStream, TOpenDialog, TSaveDialog

22

TMemoryStream

24

TActionLis^TCoolBar^TToolBar, TSphtter

27

TThread

28

TProgressBar, TTrackBar

225

ОГЛАВЛЕНИЕ

СПИСОК ЛИТЕРАТУРЫ

1.Гофман В., Хомоненко A. Delphi 6. - Дюссельдорф, М., Киев, С-Пб: БХВ - Петербург, 2001.

2Дарахвелидзе П., Марков Е. Программирование в Delphi 7. - С-Пб: БХВ-Петербург, 2003.

3.Использование Delphi 3/ Т. Миллер, Д. Пауэл и др.. - Киев, М.: Диалек­тика, 1997.

4.Кэнту М. Delphi 4. - М., Харьков, Минск, С-Пб: Питер, 1999.

5.Федоров A, Delphi 2.0 для всех. — М.: КомпьютерПресс, 1997.226

ВВЕДЕНИЕ 3

ОСНОВЫ DELPHI 5

ОБЩАЯ ТЕХНОЛОГИЯ ПРОГРАММИРОВАНИЯ ..5

ЯЗЫК ПРОГРАММИРОВАНИЯ 6

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ 7

ВИЗУАЛЬНОЕ ПРОГРАММИРОВАНИЕ 8

СОБЫТИЙНО УПРАВЛЯЕМОЕ ПРОГРАММИРОВАНИЕ 8

WINDOWS-ПРИЛОЖЕНИЕ 10

СРЕДА ПРОГРАММИРОВАНИЯ 10

ПЕРВОНАЧАЛЬНЬШ СВЕДЕНИЯ О ПРОЕКТЕ ПРИЛОЖЕНИЯ 12

ВСТРОЕННЫЙ ОТЛАДЧИК 14

ИСПОЛЬЗОВАНИЕ ВСТРОЕННЫХ КЛАССОВ 14

ИЕРАРХИЯ КЛАССОВ 14

ИСПОЛЬЗОВАНИЕ ПАЛИТРЫ КОМПОНЕНТОВ И ИНСПЕКТОРА

ОБЪЕКТОВ 16

ИСПОЛЬЗОВАНИЕ ГРАФИКИ ......17

ОСНОВНЫЕ ИНСТРУМЕНТЫ 17

ГРАФИЧЕСКИЕ ДАННЫЕ И ПАЛИТРА 19

НЕКОТОРЫЕ ОБЩИЕ СВОЙСТВА КОМПОНЕНТОВ .20

СОХРАНЕНИЕ ПРОЕКТА 21

ПОСТРОЕНИЕ ПРОСТЕЙШЕГО ПРОЕКТА .22

ПОНЯТИЕ ИСКЛЮЧИТЕЛЬНОЙ СИТУ АЛИИ 23

ВВЕДЕНИЕ В OBJECT PASCAL 24

СТРУКТУРА ПРИЛОЖЕНИЯ 24

СТРУКТУРА ПРОГРАММЫ-ПРОЕКТА 25

СТРУКТУРА МОДУЛЯ. 26

ПРИМЕР ПРИЛОЖЕНИЯ! 28

ОПИСАНИЕ ПРОГРАММНЫХ ЭЛЕМЕНТОВ 31

ПРОГРАММНЫЕ ЭЛЕМЕНТЫ И АДРЕСА ПАМЯТИ 31

ОБЛАСТИ ВИДИМОСТИ 31

ПРАВИЛА ЗАПИСИ ИМЕН 32

ВРЕМЯ ЖИЗНИ ИДЕНТИФИКАТОРОВ 32

ИСПОЛЬЗОВАНИЕ ЛОКАЛЬНЫХ ПЕРЕМЕННЫХ В ПРИМЕРЕ 7... .32 ИСПОЛЬЗОВАНИЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ В ПРИМЕРЕ 1...33

ТИПЫ 33

ПРОСТЫЕ ТИПЫ 34

ЦЕЛЫЕ ТИПЫ 35

227

СИМВОЛЬНЫЕ ТИПЫ 36

ЛОГИЧЕСКИЕ ТИПЫ... ; 37

ТИП ПЕРЕЧЕНЬ 37

ИНТЕРВАЛЬНЫЙ ТИП 38

ВЕЩЕСТВЕННЫЙ ТИП 38

ТИП ДАТА-ВРЕМЯ. 39

ВЫРАЖЕНИЯ 39

КОНСТАНТЫ 40

ТИПИЗИРОВАННЫЕ КОНСТАНТЫ 40

ПЕРЕМЕННЫЕ 40

ОПЕРАЦИИ 41

ФУНКЦИИ 42

ПОРЯДОК ВЫЧИСЛЕНИЯ ВЫРАЖЕНИЙ. 42

ВИДЫ ОПЕРАТОРОВ 43

ПРОСТЫЕ ОПЕРАТОРЫ 43

СОСТАВНОЙ ОПЕРАТОР 44

ОПЕРАТОРЫ УСЛОВНОГО ПЕРЕХОДА 44

ОПЕРАТОР IF 45

ПРИМЕР ПРИЛОЖЕНИЯ2 45

ОПЕРАТОР CASE 47

ПРИМЕР ПРИЛОЖЕНИЯ 3 48

ИСПОЛЬЗОВАНИЕ ENTER В ПРИМЕРЕ 3 52

ОПЕРАТОРЫ ЦИКЛА 53

ОПЕРАТОР ЦИКЛА FOR 53

ПРИМЕР ПРИЛОЖЕНИЯ 4 54

ОПЕРАТОР ЦИКЛА WHILE 58

ПРИМЕР ПРИЛОЖЕНИЯ 5 58

ОПЕРАТОР ЦИКЛА REPEAT 61

ПРИМЕР ПРИЛОЖЕНИЯ б 61

ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР BREAK И CONTINUE 64

ПРИМЕР ПРИЛОЖЕНИЯ 7 64

МАССИВЫ 67

СТАТИЧЕСКИЕ МАССИВЫ 67

ДИНАМИЧЕСКИЕ МАССИВЫ 68

ПРИМЕР ПРИЛОЖЕНИЯ 8 70

СТРОКИ 71

ПРИМЕР ПРИЛОЖЕНИЯ 9 73

ЗАПИСИ (ОБЪЕДИНЕНИЯ) 76

ОПЕРАТОР WITH 78

228

ПРИМЕР ПРИЛОЖЕНИЯ 10 79

СОВМЕСТИМОСТЬ И ПРЕОБРАЗОВАНИЕ ТИПОВ ДАННЫХ 85

ИДЕНТИЧНОСТЬ ТИПОВ 86

СОВМЕСТИМОСТЬ ТИПОВ.. 86

СОВМЕСТИМОСТЬ ПО ПРИСВАИВАНИЮ 86

ПРЕОБРАЗОВАНИЕ ТИПОВ 87

ОПЕРАТОРЫ ОБРАБОТКИ ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ 87

ПРИМЕР ПРИЛОЖЕНИЯ 11 89

МНОЖЕСТВА 92

ОПЕРАЦИИ НАД МНОЖЕСТВАМИ 93

ПРИМЕР ПРИЛОЖЕНИЯ 12 94

ВАРИАНТНЫЙ ТИП ДАННЫХ 97

ПРОЦЕДУРЫ И ФУНКЦИИ 99

ПРОЦЕДУРА 100

ФУНКЦИЯ 100

РЕКУРСИЯ 102

ФОРМАЛЬНЫЕ И ФАКТИЧЕСКИЕ ПАРАМЕТРЫ 102

ПАРАМЕТРЫ ЗНАЧЕНИЯ 102

ПАРАМЕТРЫ-ПЕРЕМЕННЫЕ 103

ПАРАМЕТРЫ-КОНСТАНТЫ 103

ПАРАМЕТРЫ БЕЗ ТИПА 103

МАССИВЫ ОТКРЫТОГО ТИПА 104

ПАРАМЕТРЫ ПО УМОЛЧАНИЮ 105

ПРОЦЕДУРА EXIT 106

ДИРЕКТИВЫ ПОДПРОГРАММЫ. 106

СОГЛАШЕНИЯ ПО ПЕРЕДАЧЕ ДАННЫХ. 106

ДИРЕКТИВА FORARD 106

ДИРЕКТИВА EXTERNAL 107

ДИРЕКТИВА ASSEMBLER 107

ПЕРЕГРУЖЕННЫЕ ПОДПРОГРАММЫ 107

ПРИМЕР ПРИЛОЖЕНИЯ 13 108

КЛАССЫ ИЗ

ИНКАПСУЛЯЦИЯ ИЗ

КЛАСС КАК ОБЪЕКТНЫЙ ТИП 114

НАСЛЕДОВАНИЕ 114

ОБЛАСТИ ВИДИМОСТИ 114

ОПЕРАЦИИ IS И AS 115

229

МЕТОДЫ 115

ВИДЫ МЕТОДОВ 116

МЕТОДЫ VIRTUAL И ПОЛИМОРФИЗМ. 116

МЕТОДЫ DINAMIC 118

МЕТОДЫ MESSAGE 118

МЕТОДЫ ABSTRACT. 118

МЕТОДЫ OVERRIDE 119

МЕТОДЫ CLASS 119

ПРИМЕР ПРИЛОЖЕНИЯ 14 119

ДИНАМИЧЕСКОЕ СОЗДАНИЕ КОМПОНЕНТОВ 119

ИСПОЛЬЗОВАНИЕ КЛАССА СО СЧЕТЧИКОМ ОБЪЕКТОВ 121

ОТСЛЕЖИВАНИЕ РАЗРУШЕНИЯ ОБЪЕКТОВ 123

СОБЫТИЯ , 123

УКАЗАТЕЛИ НА МЕТОДЫ 124

ПРИМЕР ПРИЛОЖЕНИЯ 15 125

ТИПЫ ССЫЛКИ НА КЛАСС 127

СВОЙСТВА '. 128

СВОЙСТВА SIMPLE 128

СВОЙСТВА ENUMERATED 129

СВОЙСТВА SET. 129

СВОЙСТВА OBJECT 129

СВОЙСТВА ARRAY. . . 131

ЗАДАНИЕ НАЧАЛЬНЫХ ЗНАЧЕНИЙ СВОЙСТВАМ. 132

ПРИМЕР ПРИЛОЖЕНИЯ 16 . 133

ФАЙЛОВЫЕ ТИПЫ 137

ТЕКСТОВЫЕ ФАЙЛЫ 138

ТИПИЗИРОВАННЫЕ ФАЙЛЫ 140

ФАЙЛЫ БЕЗ ТИПА 141

ДОПОЛНИТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ 141

ПРИМЕР ПРИЛОЖЕНИЯ 17 142

КОМПОНЕНТ TMAINMENU 142

УКАЗАТЕЛИ 148

ПРИМЕР ПРИЛОЖЕНИЯ 18 150

ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ 153

ОДНОНАПРАВЛЕННЫЕ СПИСКИ 153

ДВУНАПРАВЛЕННЫЕ СПИСКИ 155

СТЕКИ, ОЧЕРЕДИ. 156

БИНАРНЫЕ ДЕРЕВЬЯ 156

ПРИМЕР ПРИЛОЖЕНИЯ 19 158

ПРОЦЕДУРНЫЙ ТИП 164

230

ПРОГРАММНЫЕ ЕДИНИЦЫ DLL 165

ПРИМЕР ПРИЛОЖЕНИЯ 20 166

ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ 170

ПОТОКИ ДАННЫХ 170

ПРИМЕР ПРИЛОЖЕНИЯ 21 171

ПРИМЕР ПРИЛОЖЕНИЯ 22 176

ИНТЕРФЕЙС DRAG AND DROP 179

ПРИМЕР ПРИЛОЖЕНИЯ 23 180

ТЕХНОЛОГИЯ DRAG AND DROP 184

ПРИМЕР ПРИЛОЖЕНИЯ 24 185

ИСПОЛЬЗОВАНИЕ ФУНКЦИЙ WINDOWS API ПРИ

РАБОТЕ С ФАЙЛАМИ 202

ПРИМЕР ПРИЛОЖЕНИЯ 25 205

ИСПОЛЬЗОВАНИЕ ОТОБРАЖАЕМЫХ ФАЙЛОВ 207

ПРИМЕР ПРИЛОЖЕНИЯ 26 209

ПРОГРАММНЫЕ ПОТОКИ 212

ПРИОРИТЕТЫ ПОТОКОВ 213

КЛАСС TTHREAD 214

ПРИМЕР ПРИЛОЖЕНИЯ 27 215

ИСПОЛЬЗОВАНИЕ БЛОКИРОВКИ В ПРИМЕРЕ 27 217

МНОГОПОТОЧНОЕ ПРИЛОЖЕНИЕ В ПРИМЕРЕ 28 218

ПРОБЛЕМЫ СИНХРОНИЗАЦИИ ПОТОКОВ 223

ПЕРЕЧЕНЬ КОМПОНЕНТОВ, ИСПОЛЬЗОВАННЫХ

В ПРИМЕРАХ 225

СПИСОК ЛИТЕРАТУРЫ 226