Иллюстрированный самоучитель по Kylix

       

Использование синхронизации



Листинг 14.7. Использование синхронизации

procedure TMyThread.PushTheButton; begin
Button1.Click; end;
procedure TMyThread.Execute; begin
. . . Synchronize(PushTheButton);

. . . end;

Метод синхронизации защитит ваше приложение от ситуации "гонки".

Ситуация "гонки" возникает, когда два потока или более пытаются получить доступ к общему ресурсу и изменить его состояние.

Примечание

Метод синхронизации не может использоваться в консольных приложениях Для защиты одновременного доступа к CLX-объектам в консольных приложениях вы должны использовать другие методы, такие как критические секции

В некоторых случаях вы можете обходиться без метода синхронизации, например, если:



  • компоненты доступа к данным (Data access) являются потокобезопасными в том случае, когда каждый поток обращается к собственной базе данных;

    Примечание

    Когда вы используете компоненты доступа к данным, вы должны применять синхронизацию в том случае, если устанавливаете связь между компонентами доступа к данным (например, свойство DataSet в объекте DataSource). Но вы можете не прибегать к синхронизации при обращении к данным таблицы базы данных

  • объекты для работы с графикой являются потокобезопасными. Это такие классы, как TFont, TPen, TBrush, TBitmap, TDrawing и TIcon;
  • вместо объектов списков (List), которые не являются потокобезопасными, вы можете использовать потокобезопасный потомок объекта TList — TThreadList.
Назад
Содержание
Вперед


Содержание раздела