Демонстрация работы с потоками: создание, пауза, возобновление работы.
Каждый скрипт запускает как минимум один поток, который принято называть "главным". Помимо него можно запускать и другие потоки, указав, какая процедур должна в них выполняться.
В данном примере помимо главного потока описано еще 2 процедуры, все они раз в 500мс печатают свою уникальную строку в логи. Но помимо этого в 1ом потоке установлен таймер, который через 1.5 секунды после запуска приостанавливает основной и 2ой потоки (т.е. все потоки кроме себя). Сам же он продолжает свою работу, в течение еще 2 секунд, а затем завершает свою работу. При этом 2ой и главный потоки продолжают работу.
procedure Thread1();
var T: Int64;
begin
T:= GetTickCount();
while Delay(500) do begin
Print('Thread 1');
if (GetTickCount() > T+1500) then begin
Print('Suspend "Main Thread" and "Thread 2"...');
Script.Suspend();
T:= GetTickCount();
while Delay(500) and (GetTickCount() < T+2000) do Print('Thread 1');
Print('Resume all threads...');
Script.Resume();
Exit;
end;
end;
end;
procedure Thread2();
begin
while Delay(500) do Print('Thread 2');
end;
begin
Script.NewThread(@Thread1);
Script.NewThread(@Thread2);
while Delay(500) do Print('Main Thread');
Delay(-1);
end.
Main Thread
Thread 2
Thread 1
Main Thread
Thread 2
Thread 1
Thread 1
Main Thread
Thread 2
Main Thread
Thread 2
Thread 1
Suspend "Main Thread" and "Thread 2"...
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
Resume all threads...
Main Thread
Thread 2
Main Thread
Thread 2
Main Thread
Thread 2
...