| вопрос | ответ |
| 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; |