Sleep(timeout: Integer);
timeout. Время приостановки в миллисекундах.
Метод Sleep приостанавливает выполнение потока на заданное количество миллисекунд.
Для того, чтобы не блокировать основное приложение, метод Sleep должен вызываться для потока внутри пользовательского метода, с которым связан сам поток. Поток в пользовательский метод может быть передан через параметр в методе Start. Во время приостановки выполнения потока состояние потока не меняется.
Для выполнения примера предполагается наличие в репозитории модуля с идентификатором «M_THREAD_CALC». В модуле реализованы указанные методы.
Добавьте ссылку на системную сборку Fore.
Sub UserProc;
Var
Method: IForeMethod;
Th: IForeThread;
Begin
Method := New ForeMethod.Create;
Method.Assembly := "M_THREAD_CALC";
Method.Method := "SecTimer";
Th := New ForeThread.Create(Method);
//Запуск таймера в отдельном потоке
Th.Start(Th);
//...
//Продолжение основной программы с возможностью отслеживания состояния потока
//...
End Sub UserProc;
Sub SecTimer(Param: Variant);
Var
Th: IForeThread;
i: Integer;
Begin
Th := Param As IForeThread;
For i := 1 To 10 Do
Th.Sleep(1000);
Debug.WriteLine(DateTime.Now.TimeOfDay.ToString);
//...
//Какие-либо действия с задержкой в 1 секунду
//...
End For;
End Sub SecTimer;
При выполнении примера будет создан поток, связанный с пользовательским методом «SecTimer». Поток будет запущен параллельно основному потоку приложения. Внутри метода «SecTimer» циклически может выполняться какой-либо код с задержкой в одну секунду. В основном приложении при этом можно отслеживать состояние потока.
См. также: