Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка DELPHI.DOC
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.73 Mб
Скачать

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

В классе 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 с.