вопрос | ответ |
property ReturnValue: Integer; | Свойство ReturnValue позволяет узнать и установить значение, возвращаемое потоком по его завершении. Эта величина полностью определяется пользователем |
property Suspended: Boolean; | Свойство suspended позволяет программисту определить, не приостановлен ли поток. С помощью этого свойства можно также запускать и останавливать поток. |
procedure Suspend; | Вызов метода Suspend приостанавливает поток с возможностью повторного запуска впоследствии. Метод suspend приостанавливает поток вне зависимости от ко |
procedure Resume; | Метод Resume класса TThread вызывается, когда поток возобновляет выполнение после остановки, или для явного запуска потока, созданного с параметром Cr |
procedure Synchronize(Method: TThreadMethod); | Этот метод относится к секции protected, т. е. может быть вызван только из потомков TThread. Delphi предоставляет программисту метод Synchronize для |
property Priority: TThreadPriority; | Свойство Priority позволяет запросить и установить приоритет потоков. Приоритеты потоков в деталях описаны выше. Допустимыми значениями приоритета для |
property Handle: THandle read FHandle; property ThreadID: THandle read FThreadID; | Свойства Handle и ThreadID дают программисту непосредственный доступ к потоку средствами API Win32. Если разработчик хочет обратиться к потоку и управ |
function WaitFor: Integer; | Метод WaitFor предназначен для синхронизации и позволяет одному потоку дождаться момента, когда завершится другой поток. Если вы внутри потока FirstTh |
Еще одно полезное свойство: property FreeOnTerminate: Boolean; | Если это свойство равно True, то деструктор потока будет вызван автоматически по его завершении. Это очень удобно для тех случаев, когда вы в своей пр |
function Terminate: Integer; | Для окончательного завершения потока (без последующего запуска) существует метод Terminate. Но если вы думаете, что этот метод делает какие-то принуди |
destructor Destroy; override; | Деструктор Destroy вызывается, когда необходимость в созданном потоке отпадает. Деструктор завершает его и высвобождает все ресурсы, связанные с объек |
Конструктор объекта: constructor Create(CreateSuspended: Boolean); | получает параметр CreateSuspended. Если его значение равно True, вновь созданный поток не начинает выполняться до тех пор, пока не будет сделан вызов |
Если поток рассчитан на однократное выполнение каких-либо действий, | то никакого специального кода завершения внутри Execute писать не надо. |
Если поток был создан с аргументом CreateSuspended, равным False, | то метод Execute выполняется немедленно, в противном случае Execute выполняется после вызова метода Resume |
Переопределяя метод Execute, | мы можем тем самым закладывать в новый потоковый класс то, что будет выполняться при его запуске. |
Хотя формальное описание Execute — метод abstract, | но мастер создания нового объекта TThread создает для вас пустой шаблон этого метода. |
При работе с потоками необходимо учитывать приоритет создаваемых потоков. Так, если в предыдущем примере запустить не один поток, а два или больше, то | MyThread.Priority:=tpLower; Этого достаточно, чтобы компьютер чувствовал себя более свободно. |
MyThread.Terminate; | Метод Terminate уничтожает данный экземпляр потока. Теперь при нажати кнопки в приложении количество потоков всё равно остаётся равным 1 (это главный |
Можно указать что после завершения кода поток завершится автоматически: | MyThread.FreeOnTerminate:=true; |
Далее можно указать параметры потока, например приоритет: | MyThread.Priority:=tpNormal; |
Запускать поток будем нажатием на кнопку: | Вначале нужно создать экземпляр потока: MyThread:=TMyThread.Create(False); Параметр False запускает поток сразу после создания, True - запуск впоследс |
Нужно создать процедуру Execute, уже описанную в классе TMyThread | procedure TMyThread.Execute; begin //Здесь описывается код, который будет выполняться в потоке end; |
Нужно ввести переменную класса TMyThread в var | MyThread: TMyThread; |