□
выполняющийся поток остановился для ожидания;

П появился готовый к выполнению поток с более высоким приоритетом.

Теперь, наверное, вам более ясна опасность, исходящая от неоправданного завышения приоритетов. Ведь, если есть активные потоки с высоким приоритетом, ни один поток с более низким приоритетом ни разу не получит времени процессора. Эта проблема может подстерегать вас даже на уровне вашего приложения. Предположим, вы назначили вычислительному потоку приоритет thread_priority_above_normal, а потоку, где обрабатывается ввод пользователя, - thread_priorityj3ELOw_normal. Тогда вместо запланированного результата - совместить вычисления с нормальной реакцией приложения - вы получите строго обратный. Приложение вообще перестанет откликаться на ввод, и снять его будет возможно только с помощью средств ОС.

Так что нормальная практика для асимметричных потоков - это назначение потоку, обрабатывающему ввод, более высокого приоритета, а всем остальным - более низкого или даже приоритета idle, если этот поток должен выполняться только во время простоя системы.

Класс TThread

Delphi представляет программисту полный доступ к возможностям программирования интерфейса Win32. Для чего же тогда фирма Borland представила специальный класс для организации потоков? Вообще говоря, программист не обязан разбираться во всех тонкостях механизмов, предлагаемых операционной системой. Класс должен инкапсулировать и упрощать программный интерфейс; класс TThread - прекрасный пример предоставления разработчику простого доступа к программированию потоков. Сам API потоков, вообще говоря, не очень сложен, но предоставленные классом TThread возможности вообще замечательно просты. В двух словах, все, что вам необходимо сделать, - это перекрыть виртуальный метод Execute.

Другая отличительная черта класса TThread - это гарантия безопасной работы с библиотекой визуальных компонентов VCL. Без использования класса TThread во время вызовов VCL могут возникнуть ситуации, требующие специальной синхронизации (см. разд. "Проблемы при синхронизации потоков" далее в этой главе).

Нужно отдавать себе отчет, что с точки зрения операционной системы поток - это ее объект. При создании он получает дескриптор и отслеживается ОС. Объект класса TThread - это конструкция Delphi, соответствующая потоку ОС. Этот объект VCL создается до реального возникновения потока в системе и уничтожается после его исчезновения.

Изучение класса TThread начнем с метода Execute: procedure Execute;
virtual;
abstract;

Это и есть код, исполняемый в создаваемом вами потоке TThread.

(_Примечание ^

Хотя формальное описание Execute-метод abstract, но мастер создания нового объекта TThread создает для вас пустой шаблон этого метода.

Переопределяя метод Execute, мы можем тем самым закладывать в новый потоковый класс то, что будет выполняться при его запуске. Если поток был создан С аргументом CreateSuspended, равным False, то метод Execute выполняется немедленно, в противном случае Execute выполняется после вызова метода Resume (см. описание конструктора ниже).


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Ноябрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс