Robert, your unit seems usable but it has some serious bugs. Take for instance:

i := starttimer;
i2 := starttimer;
stoptimer(i);
stoptimer(i2);

this would make the procedure try to access the value in QTimers[i2] which would be QTimers[1]. This array entry does however not exist due to that we set the length of the array to 1 when we stopped timer i.