Start([Param: Variant = Null]);
Start(Param: Object);
Param. Значение параметра, которое будет передано в выполняемый метод.
Метод Start запускает поток на выполнение.
При вызове метода Start запускается на выполнение пользовательский метод, который был указан в конструкторе Create. Если пользовательский метод в своей сигнатуре имеет параметр, то, используя Param, можно передать в метод необходимое значение или массив значений.
Для выполнения примера предполагается наличие в репозитории модуля с идентификатором «M_THREAD_CALC». В модуле реализованы указанные методы.
Добавьте ссылку на системную сборку Fore.
Sub UserProc;
Var
Method: IForeMethod;
Th1, Th2: IForeThread;
Begin
Method := New ForeMethod.Create;
Method.Assembly := "M_THREAD_CALC";
Method.Method := "Init";
//Создание потока
Th1 := New ForeThread.Create(Method);
Th1.Name := "Подготовка к расчёту";
Th1.Start;
//Ожидание завершения метода Init в потоке
Th1.Join;
//Создание потоков на базе метода Calculate
Method.Method := "Calculate";
Th1 := New ForeThread.Create(Method);
Th1.Name := "Общий расчёт";
Th2 := New ForeThread.Create(Method);
Th2.Name := "Расчёт повышенной точности";
//Запуск параллельного выполнения потоков с разными значениями параметра
Th1.Start(0.00001);
Th2.Start(0.0000001);
While (Th1.State = ForeThreadState.Running) Or (Th2.State = ForeThreadState.Running) Do
//...
//Отслеживание состояния потоков
//...
End While;
Debug.WriteLine("End");
End Sub UserProc;
Sub Init;
Begin
Debug.WriteLine("Init");
//...
//Подготовка к расчёту
//...
End Sub Init;
Sub Calculate(Error: Double);
Begin
Debug.WriteLine(Error);
//...
//Действия по выполнению какого-либо расчёта
//...
End Sub Calculate;
Работа с потоками доступна только в языке Fore
При выполнении примера будет создан поток, связанный с пользовательским методом «Init». Поток будет запущен, при этом текущий код будет ожидать завершения выполнения потока. После этого создаются два потока, связанных с пользовательским методом «Calculate». Потоки будут запущены параллельно с различными значениями параметра. В цикле будет производиться отслеживание состояния потоков до того момента, пока они не будут завершены.
См. также: