Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Свойства Handle и ThreadID




property Handle: THandle read THandle;

property ThreadID: THandle read TThreadID;

Свойства Handle и ThreadID возвращают дескриптор и идентификатор потока – объекта операционной системы, который создается для каждого объекта класса TThread. Эти свойства дают программисту возможность непосредственной работы с потоком средствами API Win32, разработчик может обратиться к потоку и управлять им, минуя возможности класса TThread. Значения данных свойств непосредственно используются в качестве аргументов функций, управляющих потоком. Значения этих свойств приходятся при досрочном завершении потока (), синхронизации потоков с помощью функций ожидания (ожидание завершения одного - или нескольких потоков) и т.д.

Приоритет потока – свойство Priority

property Priority: TThreadPriority;

Свойство Priority позволяет запросить и установить приоритет потока. Допустимыми значениями свойства Priority объектов класса TThread являются элементы перечислимого типа TThreadPriority: tpidle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest и tpTimeCritical.

Метод Synchronize

procedure Synchronize(Method: TThreadMethod);

Метод используется для безопасного обращения к объектам VCL (формы и элементы управления) из потоков, отличных от потока формы. Для каждой формы в Delphi свой поток, управляющий ее поведением, и только из этого потока можно безопасно обращаться к форме и ее элементам управления, не используя средства синхронизации. Для обращения к форме из других потоков использование метода Synchronize обязательно. Вызов метода synchronize дает гарантию, что к каждому объекту одновременно имеет доступ только один поток, и таким образом исключается ситуация конфликта. Сложность проблемы в том, что Delphi не контролирует выполнение этого правила и не препятствует обращению в форме из другого потока, формального противоречия в данном случае нет, язык Object Pascal позволяет производить такое обращение. И в некоторых случая программа даже будет работать, но до момента наступления конфликта обращения различных потоков к форме. В принципе, такой конфликт может не происходить продолжительное время, в течение многократных запусков программы. Но затем обязательно произойдет и притом в самый ответственный момент. Отладка многопоточных программ одна из основных сложностей разработки таких программ. Ошибки взаимодействия потоков трудно «отловить», т.к. условия, приведшие к ошибке трудно возобновимы.

Метод Synchronize относится к секции protected, т. е. может быть вызван только из потомков TThread. Аргумент, передаваемый в метод Synchronize, - это имя метода, который производит обращение к VCL. Параметр метод (класса TThreadMethod) не должен иметь никаких параметров и не должен возвращать никаких значений. Обычно все операции по вводу-выводу данных потоком группируют в один или несколько таких методов, которые вызывают с помощью метода Synchronize. А проблема отсутствия параметров у метода, передаваемого в качестве аргумента решается за счет переменных уровня класса.

procedure TMainForm.SyncShowMessage; begin

ShowMessagedntToStr (ThreadListl. Count)); // другие обращения к VCL

end;

а в потоке для показа сообщения писать не

ShowMessage(IntToStr(ThreadListl.Count));

и даже не

MainForm.SyncShowMessage;

а только так:

Synchronize(MainForm.SyncShowMessage);

Итак, можно сформулировать основное правило обращения к формам и их элементам управления из потоков. Производя любое обращение к объекту VCL из потока, убедитесь, что при этом используется метод Synchronize; в противном случае результаты могут оказаться непредсказуемыми.






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных