@ingox Good stuff--it's cool when abstractions just take care of the dull bookkeeping for you.  In a past life I used to do that kind of thing in Java/c# using static class variables.
The slow motion instant replay approach turned out to be much easier than I anticipated, but I thought I'd post my code anyway to show why a busy wait, were it as simple as in Arduino, would have taken almost no time at all.

 quicksort hoare.pd
 quicksort hoare.pd
Had I been able to replace that [send] with a 300 mS busy wait, I would have been done.
Update:  Ha ha, it looks like if the evaluation tree gets too deep you run out of Pd stack.  Or I have a bug somewhere.  This input data breaks the sort on my machine:  quicksort stack overflow input.pd
Update 2:  the answer is here.  The way I'm performing the outer loop in [pd partition] is bad.  Replace it with [until] and it works.  It also means that I should replace the quicksort recursion with iteration too--which in turn moots my entire topic because then the need for busy waits goes away.  Never mind!  quicksort hoare.pd
Update 3:  BS alert--I don't know why I thought the topic was mooted by having everything as iteration.  It's not.  [Never mind( -> [pow 2]