Seite 1 von 1

CPU-Auslastung beim Server veringern

Verfasst: 04.03.2009 07:45
von Sunny
Ich hab mir mal den Server im Beispiel von PureBasic angesehen

Server:

Code: Alles auswählen

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6832
*Buffer = AllocateMemory(1000)

If CreateNetworkServer(0, Port)

  MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
  
  Repeat
      
    SEvent = NetworkServerEvent()
  
    If SEvent
    
      ClientID = EventClient()
  
      Select SEvent
      
        Case 1
          MessageRequester("PureBasic - Server", "A new client has connected !", 0)
  
        Case 2
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
          ReceiveNetworkData(ClientID, *Buffer, 1000)
          MessageRequester("Info", "String: "+PeekS(*Buffer), 0)
  
        Case 3
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
          ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
  
        Case 4
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
          Quit = 1
    
      EndSelect
    EndIf
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer(0)
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

  
End
und festgestellt, dass der ne ziemlich hohe CPU-Auslastung hat.

Meine Frage ist jetzt, was kann ich tun, um die CPU-Auslastung etwas geringer zu halten???

Verfasst: 04.03.2009 10:40
von php-freak
DAS WEIß ICH :mrgreen:

Code:

Code: Alles auswählen

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 6832
*Buffer = AllocateMemory(1000)

If CreateNetworkServer(0, Port)

  MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
 
  Repeat
  Delay(10)   
    SEvent = NetworkServerEvent()
 
    If SEvent
   
      ClientID = EventClient()
 
      Select SEvent
     
        Case 1
          MessageRequester("PureBasic - Server", "A new client has connected !", 0)
 
        Case 2
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
          ReceiveNetworkData(ClientID, *Buffer, 1000)
          MessageRequester("Info", "String: "+PeekS(*Buffer), 0)
 
        Case 3
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
          ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
 
        Case 4
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connexion...", 0)
          Quit = 1
   
      EndSelect
    EndIf
   
  Until Quit = 1
 
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
 
  CloseNetworkServer(0)
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

 
End 
delay(10) verwenden! Dann wartet er 10ms! Sonnst versucht er es so oft zu durchlaufen wie er kann!

Verfasst: 04.03.2009 13:20
von HeX0R
Eigentlich sollte man einen Delay nur bei einem NetworkServerEvent() = 0 benutzen.
Wenn der Server am arbeiten ist, will ich ihn ja nicht unnötig ausbremsen.
(Wenn eh nur MickyMaus-Pakete hin- und hergeschickt werden, ist es aber auch wurscht).

Verfasst: 07.03.2009 09:45
von Regenduft
php-freak hat geschrieben:DAS WEIß ICH :mrgreen:
Mann, mann, mann... schon das zweite falsche ß im Versalsatz and einem Tag... (hier müssen mal ein paar Shift-Tasten demontiert werden) :wink: