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

Antwort per Email an