Hallo Folks,
ich brauch mal eure Hilfe. Der folgende Code wird im Thread ausgeführt und soll
alle 20ms UDP Frames
(sendFrame) senden. Beim MAC OS X liegt die CPU Auslastung beim ständigen
Senden unter 20%
und die Frames werden genau alle 20ms gesendet. Somit super.
Die gleiche Routine verursacht unter WindowsXP/7 eine CPU Auslastung von 90%.
Dafür habe ich dann
eine Pause von 5ms eingeführt me.sleep(5) und die CPU Last hat sich dann bei
WindowsXP/7 unter 20%
eingestellt. Soweit gut.
Nur leider hilft das nicht bei Ubuntu. Auch der me.sleep(5) bringt nur sehr
wenige Prozentpunkte.
Ich habe dann den Thread mit einem Timer kombiniert (siehe unten 2. Ubuntu),
aber das brachte auch
nur wenige Prozentpunkte. Also, unter 70% kriege ich die CPU Auslastung nicht.
Nur mit einem Timer arbeiten ist nicht möglich, da der Timer im ms Bereich
unter RB sehr ungenau ist.
Daher die Lösung mit dem Thread.
Ich habe auch mit sleepMBS getestet, aber das brachte auch nichts, bzw. die CPU
Last ist noch höher gegangen.
Kann wer helfen?
Gruß
Klemens
1. MAC OS X und WindowsXP/7:
dim lastWait, delta, tx as Double
while window1.threadStart=true
delta = Microseconds
if lastWait <= delta then
lastWait = delta + (20*1000)
SendFrame // frames senden
#if TargetWin32 then
me.sleep(5)
#endif
end if
wend
2. Ubuntu:
dim lastWait, delta as Double
while window1.threadStart=true
delta = Microseconds
if lastWait <= delta then
lastWait = delta + (20*1000)
SendFrame // frames senden
Timer_Wait.Period = 15 //der Timer führt nach 15ms ein thread1.resume
aus
Timer_Wait.Enabled=true
Timer_Wait.Reset
me.Suspend
end if
wend