Однако есть проблема. Каждый раз при вызове функции передаются разные параметры. У вас переменная r объявлена глобальной и получается при одновременном выполнении нескольких экземпляров функции - они все используют одну переменную r. Мне нужно чтобы каждый раз функция запускалась в новом потоке с новыми параметрами (например как я писал Random(5) ).
Пробовал сделать переменную r локальной для процедуры клика на кнопке(procedure TForm1.Button1Click(Sender: TObject)

, однако в результате при многократном нажатии Button1 - программа вылетает с ошибками AccesViolation.