CreateThread()
Синтаксис
Thread = CreateThread(@ProcedureName() , *Value)
Описание
Эта функция вызывает указанную процедуру '@ProcedureName()', которая будет выполнена параллельно основному коду программы, то есть в отдельном потоке. Таким образом, эта функция создаёт новый поток. Если поток создан корректно, функция возвратит идентификационный Номер потока, который может использоваться другими функциями этой библиотеки, такими как KillThread(), PauseThread(), и т.д.. Процедура, которую вы используете в качестве исполняемого кода потока, должна принимать только один параметр и не может ничего возвращать. Аргумент '*Value' функции CreateThread() передаётся как параметр процедуре потока. Если вы попытаетесь возвратить значение из вашего потока, оно просто потеряется.
Параметры
@ProcedureName() Адрес процедуры, которую вы хотите использовать в качестве кода нового потока. Не забудьте поставить символ '@' впереди имени и скобки '()' после имени, чтобы получить адрес процедуры. *Value Это значение передаётся коду потока как параметр вашей функции. Вам решить, для чего это значение использовать.
Возвращаемое значение
Идентификационный Номер созданного потока, если новый поток создать невозможно - возвратится 0. Этот Номер необходим, если вы хотите контролировать поток с помощью других функций этой библиотеки.
Пример
Пример ниже показывает простейший способ создать поток, хотя в данном случае он ничего не делает.
Procedure YourProcedure(*Value) ; Переменная '*Value' будет содержать 23 EndProcedure CreateThread(@YourProcedure(), 23)
Пример: Передача потоку нескольких параметров
Structure Person Name$ Age.b Phone.l EndStructure Procedure Thread(*Parameters.Person) ; Отображаем параметры ; Debug *Parameters\Name$ Debug *Parameters\Age Debug *Parameters\Phone ; Когда они нам больше не нужны, используем ClearStructure() чтобы гарантировать, что все динамические ; объекты (если есть) корректно удалены, и освободим блок динамической памяти ClearStructure(*Parameters, Person) FreeMemory(*Parameters) EndProcedure ; Мы используем динамически выделенный блок, поэтому даже если мы обратимся к нему из процедуры, ; это будет работать. Блок памяти будет освобождён потоком. ; *Parameters.Person = AllocateMemory(SizeOf(Person)) *Parameters\Name$ = "John" *Parameters\Age = 30 *Parameters\Phone = 10203040 CreateThread(@Thread(), *Parameters) ; Отправим потоку указатель на нашу структуру Delay(2000)
Поддерживаемые OS
Все