SendNetworkData_Safe()

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Aber wenn ich eine Fußgesteuerte Schleife verwende hab ich mindestens 1* die Verzögerung drinnen.

// Edit: Na gut, so ists akzeptabel:

Code: Alles auswählen

; Verwenden wie SendNetworkData
Procedure SendNetworkData_Safe(ConnectionID, *MemoryBuffer, Lenght, MaximumRetrys = 3, Delay = 10)
  Protected Retrys, RtVar, OffSet
  
  Repeat
    RtVar = SendNetworkData(ConnectionID, *MemoryBuffer + OffSet, Lenght-OffSet)
    
    If (RtVar + OffSet)<Lenght And Retrys<MaximumRetrys
      If RtVar> -1
        OffSet + RtVar
      EndIf
      Retrys + 1
      Delay(Delay)
    Else
      Break
    EndIf
  ForEver
  
  ProcedureReturn RtVar
EndProcedure 
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Little John

Beitrag von Little John »

Eine kopfgesteuerte Schleife in der Art wie ich's oben gemacht habe finde ich nichts Ungewöhnliches. Ein Klassiker in dieser Hinsicht ist wohl sowas:

Code: Alles auswählen

name = FindFirstFile("*.txt")
While name <> ""
   ; do this and that

   name = FindNextFile()
Wend
Nur dass ich nicht zwei verschiedene Funktionen aufgerufen habe, sondern 2x die selbe ....

Gruß, Little John
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenns abzusehen ist, was günstiger ist, sollte man es auch nutzen!

Code: Alles auswählen

Repeat
  name = FindFirstFile("*.txt")
Until Not name
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Wie war das noch mit dem Programmiererführerschein und so? :mrgreen:
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Little John

Beitrag von Little John »

ts-soft hat geschrieben:Wenns abzusehen ist, was günstiger ist, sollte man es auch nutzen!

Code: Alles auswählen

Repeat
  name = FindFirstFile("*.txt")
Until Not name
Dieser Code ist nicht mit dem von mir geposteten äquivalent. cxAlex hatte das oben schon näher erläutert.

Gruß, Little John
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Genau, deswegen wird hier auch keine kopfgesteuerte Schleife, sondern
eine fußgesteuerte Schleife bevorzugt verwendet. :D

So wie cxAlex es nun zuletzt gepostet hat hab ich das auch gemacht. <)
Little Johns kopfgesteuerte Schleife ist zwar nicht zwingend verkehrt, aber
es ist auch nicht das optimalste.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Little John

Beitrag von Little John »

PMV hat geschrieben:Genau, deswegen wird hier auch keine kopfgesteuerte Schleife, sondern eine fußgesteuerte Schleife bevorzugt verwendet. :D
Meine Code hat exakt die Programmlogik von cxAlex' Code nachgeahmt, und genau darum ging es mir in dem Moment vor allem.
Abgesehen davon unterscheiden sich die Präferenzen, wie hier offensichtlich ist.
PMV hat geschrieben:Little Johns kopfgesteuerte Schleife ist zwar nicht zwingend verkehrt, aber es ist auch nicht das optimalste.
Nee, "das optimalste" bestimmt nicht.

Gruß, Little John
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Also ich würde es so machen um das Else noch zu ersparen:

Code: Alles auswählen

  Repeat 
    RtVar = SendNetworkData(ConnectionID, *MemoryBuffer + OffSet, Lenght-OffSet) 
    
    If (RtVar + OffSet)<Lenght And Retrys<MaximumRetrys 
      If RtVar> -1 
        OffSet + RtVar 
      EndIf 
      Retrys + 1 
      Delay(Delay) 
      Continue
    EndIf 
  Until #True 
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten