Позволяет создать динамично несколько потоков в программе.
procedure threads_start(Uid: Integer);
Создает поток, заданный уникальным индетификатором, и ставит его в очередь потоков,
после запуска, в основной программе вызывается thread_id(Uid: Integer) с Uid этого потока.
Uid любое число. В дальнейшем используется для обработки данного потока.
Внимание! Если повторно вызвать threads_start с таким же Uid, тогда,
если поток Uid уже закончил работу будет создан новый поток с этим же Uid и повторно вызвана процедура-обработчик,
в противном случае поток просто продолжит свою работу, а повторный запрос игнорируется.
procedure threads_stop(Uid: Integer);
Прерывает работу потока Uid.
Работает только на части телефонов MIDP2.0/CLDC1.1, не рекомендуется к использованию, остановку производить из программы.
procedure threads_stop_all();
Прерывает работу всех созданных потоков.
Работает только на части телефонов MIDP2.0/CLDC1.1, не рекомендуется к использованию, остановку производить из программы.
function threads_isactive(Uid: Integer): Integer;
Возвращает состояние потока Uid.
1 - поток выполняется в данный момент.
0 - поток завершил работу, статус готов к удалению.
-1 - поток удален или не существует.
function threads_getpriority(Uid: Integer): Integer;
Возвращает приоритет потока Uid.
procedure threads_setpriority(Uid, priority: Integer);
Устанавливает приоритет для потока Uid.
Числовое представление значений приоритета потока. Для использования в get/setpriority:
function threads_max: Integer;
Максимальный приоритет.
function threads_min: Integer;
Минимальный.
function threads_norm: Integer;
Обычный.
В основной код программы добавить!
Процедура вызывается при запуске потока UId.
procedure thread_id(Uid: integer);
begin
// sometimes code
// if Uid then ...
end;
Пример:
program Example;
uses threads;
var
first_run: boolean; //Используем для прерывания работы потока 1
procedure first;
begin
first_run:= true;
while first_run do
begin
...// какой то код
end;
end;
procedure second;
begin
...// какой то код
// поток 1 еще выполняется? Снизим свой (777) приоритет, отдадим ресурсы
if threads_isactive(1)=1 then threads_setpriority(777, threads_min);
...// какой то код
end;
//процедура обработчик потоков,
//вызывается при запуске потока, предавая Uid потока
procedure thread_id(Uid: integer);
begin
if Uid=1 then first;
if Uid=777 then second;
end;
begin
... // какой то код
threads_start(1); // создаем новый поток с Uid 1
...// какой то код
...// какой то код
threads_start(777); // создаем новый поток с Uid 777
...// какой то код
// если поток 777 завершил работу или не существует выполняем поток 777 вновь
if threads_isactive(777)<>1 then threads_start(777);
...// какой то код
// останавливаем поток 1
// threads_stop(1); // не рекомендуется! Работает только на части телефонов MIDP2.0/CLDC1.1
first_run:= false;
end;