Outputs a 9x9 image with a random color, every 999 milliseconds - which is within the 10ms error range.
%C=run!CANVAS->init(9,9)run%C->ontick(fn()=>run%C->fillRect(0 0 9 9run%C->getRandomColor)999)
It does exactly what it's supposed to.
Ungolfed
This code does exactly the same.
$fn = anonymous function() { $color = call %canvas->getRandomColor(); call %canvas->fillRect(0, 0, 9, 9, $color); }; %canvas = call !CANVAS->init(9, 9); call %canvas->ontick($fn, 999);
I'm too lazy to write a full English-like version.
If you need more information, to confirm it does do what it's supposed to do, just add this after the code:
// Golfed version: call %C->showDebug(); // Ungolfed version: call %canvas->showDebug();
To make sure it is running, just check that the (manually) underlined value changes at a rate of ~1 second:

That value represents the number of frames that were actually drawn.
By default, the code avoids re-drawing the canvas if there were no updates.
And each call to fillRect will trigger a single update.
You can replace ontick with onframe or onclick to verify that the value really represents what I've said.
while 1:print("")in Python and still be within the rules of the challenge? \$\endgroup\$print(""), the output is technically a newline, which is not empty. Do you mean to ban whitespace output? If so, that would be a very unnecessary restriction and the rule should be removed from the challenge. \$\endgroup\$