Code: Alles auswählen
procedure Sleep(milliseconds: Cardinal);
Var
timeout,timeoutresult : TTimespec;
res: cint;
begin
timeout.tv_sec:=milliseconds div 1000;
timeout.tv_nsec:=1000*1000*(milliseconds mod 1000);
repeat
res:=fpnanosleep(@timeout,@timeoutresult);
timeout:=timeoutresult;
until (res<>-1) or (fpgeterrno<>ESysEINTR);
end;
Hier wird fpnanosleep aufgerufen, aber was macht diese. mehr sehe nicht, da diese external ist.
Lastet Sleep ein CPU-Kern mit repeat until voll aus, oder macht das das OS irgend was intelligenteres ?
Bei Arduino ist die mit einer Schleife gelöst.
Code: Alles auswählen
void delay(unsigned long ms) {
uint16_t start = (uint16_t) micros();
while (ms > 0) {
if (((uint16_t) micros() - start) >= 1000) {
ms--;
start += 1000;
}
}
}