Seite 1 von 2
SendNetworkData_Safe()
Verfasst: 03.03.2009 18:22
von cxAlex
Ein kleines Snippet um Daten "sicher" zu übertragen. Exakt selber Syntax wie SendNetwork Data nur mit optinalem Retry - Parametern, um die Daten nochmal zu senden falls es beim ersten mal nicht geklappt hat.
Schlagt mich nicht weil ein Goto drin ist, einmal in 100 Jahren wird mans wohl verwenden dürfen

. (Ist an der Stelle für mich wirklich übersichtlicher als eine Lösung mit einer Schleife)
Wikipedia hat geschrieben:In der Praxis hat sich jedoch gezeigt, dass der Verzicht auf GoTo zwar möglich ist, jedoch in einigen Fällen zu sehr aufwändigen Konstrukten führt. Besonders in zeitkritischen Programmteilen ist ein goto deutlich effektiver als am Ende von mehreren geschachtelten Schleifen jeweils eine Abbruchprüfung durchzuführen.
Code: Alles auswählen
; Verwenden wie SendNetworkData
Procedure SendNetworkData_Safe(ConnectionID, *MemoryBuffer, Lenght, MaximumRetrys = 3, Delay = 10)
Protected Retrys, RtVar, OffSet
_SafeNetworkSend_Jump:
RtVar = SendNetworkData(ConnectionID, *MemoryBuffer + OffSet, Lenght-OffSet)
If (RtVar + OffSet)<Lenght ; zu wenig gesendet
If Retrys<MaximumRetrys ; sind noch Versuche übrig?
If RtVar> -1
OffSet + RtVar ; Offset erhöhen
EndIf
Retrys + 1
Delay(Delay) ; ein bisschen warten
Goto _SafeNetworkSend_Jump ; nochmal
EndIf
EndIf
ProcedureReturn RtVar
EndProcedure
Verfasst: 03.03.2009 19:59
von Little John
Hier inhaltlich exakt der gleiche Code, diesmal mit einer
While-Schleife:
Code: Alles auswählen
; Verwenden wie SendNetworkData
Procedure SendNetworkData_Safe(ConnectionID, *MemoryBuffer, Lenght, MaximumRetrys = 3, Delay = 10)
Protected Retrys, RtVar, OffSet
RtVar = SendNetworkData(ConnectionID, *MemoryBuffer+OffSet, Lenght-OffSet)
While (RtVar+OffSet) < Lenght And Retrys < MaximumRetrys
If RtVar > -1
OffSet + RtVar
EndIf
Retrys + 1
Delay(Delay)
RtVar = SendNetworkData(ConnectionID, *MemoryBuffer+OffSet, Lenght-OffSet)
Wend
ProcedureReturn RtVar
EndProcedure
Gruß, Little John
Verfasst: 03.03.2009 20:02
von cxAlex
Meine Konstruktion gefällt mir trozdem besser

.
Ich hatte es vorher auch so, aber mich stört das ich dann 2* SendNetworkData() verwenden muss wenn ich Standartmäßig keine Verzögerung will.
Verfasst: 03.03.2009 20:06
von Little John
Das hab' ich mir fast gedacht.

Aber so kann nun jeder Leser das nehmen, was ihm selbst am besten gefällt.
Gruß, Little John
Verfasst: 03.03.2009 20:11
von cxAlex
Jo, hast recht. Normal verwend ich kein Goto, das hier für mich einer der in Wikipedia genannten Außnahmen. Das erinnert mich an einen Test in Informatik vor 2 Jahren

:
Prof.: "Und programmieren sie das, und das und...."
Prof.: "Aigner?"
Ich.: "Ja?"
Prof.: "Wenn sie Goto verwenden gibts ne 3 Grad schlechtere Note"
Ich.: "Und GoSub?"
Prof.: " Aigner?!!"
Ich.: "Ok, dann nur ein Break.... "
Später hat er mir noch gedroht ich müsste alles in ASM programmieren, dann hab ich ihn freundlich darauf hingewießen das ich da um Jumps nicht herumkommen werde

.
Verfasst: 03.03.2009 20:15
von Andesdaf
cxAlex' Informatikunterricht hat geschrieben:Prof.: "Und programmieren sie das, und das und...."
Prof.: "Aigner?"
Ich.: "Ja?"
Prof.: "Wenn sie Goto verwenden gibts ne 3 Grad schlechtere Note"
Ich.: "Und GoSub?"
Prof.: " Aigner?!!"
Ich.: "Ok, dann nur ein Break.... "

Verfasst: 03.03.2009 20:22
von cxAlex
[ot]
Mit dem Professor hatte ich schon ein paar sehr "lustige" Dialoge. Erst kürzlich:
Ich hab ein Buch von Hohlbein auf dem Tisch liegen (Chroniken der Unsterblichen):
Mein Informatikunterricht hat geschrieben:Prof.: "Was lesen Sie denn da Aigner?" *Nimmt das Buch und sieht es sich an*
Prof.: "Ah, Hohlbein. Pffffff."
Aigner.: "Haben sie was gegen Hohlbein?"
Prof.: "Hohlbein ist'n totaler Topfn"
Aigner (& Huspek).: *laut* "Hohlbein ftw!"
Prof.:"Geh. Meine Tocher sagt bei Hohlbein ist ein Buch wie das andere"
Aigner.: "Ihre Tochter kennt sich nicht aus"
Prof.: "I kenn mei Tochter a bissl besser als Sie Aigner."
Aigner.: "Sicher... ?"
Prof.: "Aigner!!"
[/ot]
Verfasst: 03.03.2009 20:31
von Little John
cxAlex hat geschrieben:das hier für mich einer der in Wikipedia genannten Außnahmen.
Das was Du oben aus Wikipedia zitiert hast trifft hier IMHO nicht zu, denn hier führt weder der Verzicht auf GoTo zu sehr aufwändigen Konstrukten, noch wird am am Ende von mehreren geschachtelten Schleifen jeweils eine Abbruchprüfung durchgeführt.
cxAlex hat geschrieben:Das erinnert mich an einen Test in Informatik vor 2 Jahren

:
Prof.: "Und programmieren sie das, und das und...."
Prof.: "Aigner?"
Ich.: "Ja?"
Prof.: "Wenn sie Goto verwenden gibts ne 3 Grad schlechtere Note"
Ich.: "Und GoSub?"
Prof.: " Aigner?!!"
Ich.: "Ok, dann nur ein Break.... "
Später hat er mir noch gedroht ich müsste alles in ASM programmieren, dann hab ich ihn freundlich darauf hingewießen das ich da um Jumps nicht herumkommen werde

.
Das erinnert mich daran, dass ich von einem meiner ehemaligen Profs. noch ein Bügeleisen zu bekommen habe, welches ich mal bei einer Wette gewonnen habe. Ich weiß im Moment allerdings nicht mal mehr wie der Prof. hieß ...
Gruß, Little John
Verfasst: 03.03.2009 20:35
von Little John
cxAlex hat geschrieben:Aigner.: "Ihre Tochter kennt sich nicht aus"
Prof.: "I kenn mei Tochter a bissl besser als Sie Aigner."
Aigner.: "Sicher... ?"
Prof.: "Aigner!!"
Willst Du nicht mal in der Laberecke ne regelmäßige Kolumne mit Geschichten von Dir und Deinem Professor aufmachen? Das wäre bestimmt sehr lustig.
Gruß, Little John
Verfasst: 03.03.2009 20:41
von ts-soft
> aber mich stört das ich dann 2* SendNetworkData()
Totaler Blödsinn
Ansonsten keine kopfgesteuerte Schleife, sondern eine fußgesteuerte
Schleife, um das zu vermeiden.
goto, wir schreiben das Jahr 2009 ...