@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
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]