Seite 2 von 2

Verfasst: 03.03.2009 20:43
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 

Verfasst: 03.03.2009 21:18
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

Verfasst: 03.03.2009 21:24
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

Verfasst: 03.03.2009 21:25
von PMV
Wie war das noch mit dem Programmiererführerschein und so? :mrgreen:

Verfasst: 03.03.2009 21:36
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

Verfasst: 03.03.2009 21:48
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

Verfasst: 03.03.2009 21:57
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

Verfasst: 04.03.2009 01:10
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