Thread Ausgabe vom Server wird nicht richtig abgeholt
(9 answers)
Opened by Echelon1010000 at 2005-07-08 12:34
Hi
Die eigentliche Fehlermeldung wird erst in der jeweiligen Sub ausgewertet die den Fehler verursacht. Das hat auch seinen Grund: Ich habe etwa 8 Subs die alle dafür zuständig sind bestehende Anzeigen auf dem LCD zu verändern. Eine davon habe ich oben gepostet: setstring(); Dazu weiter 8 die Anzeigen hinzufügen und entfernen. Beispielhaft hierfür ist die oben gezeigte sub addstring(); Schlussendlich noch einige weiter um Einstellungen clientseitig zu ändern etc. Der Server antwortet jedoch auf eine ungültige Anweisung, um beim Beispiel zu bleiben, nicht mit genauen Informationen sondern nur mit einer Meldung wie "huh? unknown widget id". Dabei ist es ihm ziemlich egal ob das widget das ich bearbeiten wollte nun ein string war, ein Balken, eine Überschrift oder ein Scroller. Während ein nicht existentes (unknown) widget hier noch recht leicht zu identifizieren ist wird es bei der Fehlermeldung "incorrect parameter" schon kompliziert. Dazu kommt noch das die Sub suck(); nicht weiss von welchem der 10 Module (CPU, Load, Net, News etc...) sie aufgerufen wurde. Sie kann also nicht spezifisch eine angepasste Fehlermeldung zurückgeben. Um also die Fehlermeldung mit der aufrufenden Sub in Verbindung zu bringen muesste ich entweder die aufrufende Sub mit an die sub suck() übergeben oder die Fehlermeldung zurückgeben und die Auswertung in der aufrufenden sub setstring(); vornehmen. Letzteres erschien mir programmtechnisch gesehen die bessere Lösung. Im Erfolgsfall ist aber eigentlich garkeine Rückmeldung erfolgreich. Hier reicht IMO eine "1" völlig aus. Im Fehlerfall wird zurückgegeben was denn genau schief ging und die aufrufende Sub kann sich um die Auswertung kümmern. Um die Rückgabe stimmig zu gestalten kann ich jetzt die Serverantwort immer mit geben, dann fragt die aufrufende Sub eben nicht "if ( $answer != 1)" bzw. "if ( $answer ne "1") " sondern nach "if ( $answer ne "success")" Das ist stilistisch gesehen sicher die sauberere Lösung, bei einem Programm an dem man noch entwickelt aber IMO noch nicht von tragender Bedeutung. Solcherlei läuft bei mir eher unter Optimierung und Cleaning und werden im gleichen Schritt bereinigt in dem auch Sachen wie (Pseudcode) Code: (dl
)
1 $starttime=time(); zu vereinfacht werden. Ich danke dir aber für deinen Hinweis :) Allerdings stellt sich mir noch eine Frage: Ich wäre jetzt davon ausgegangen immer den Rückgabewert des Servers zurückzugeben. Welchen Vorteil hätte die Methode zwei Rückgabewerte zurückzugeben, einmal eine Zahl und einmal die eigentliche Nachricht? Bekomme ich dadurch nicht eine doppelte Auswertung? Ich muss einmal in der sub suck(); prüfen welchen Wert ich zurückgeben muss und dann in der aufrufenden Sub welchen Wert ich empfangen hab, und anschliessend noch den Text auswerten. Bei der von mir angestrebten Methode gebe ich nur den Text zurück (sofern er keine Infonachricht ist) und lasse die Auswertung in der aufrufenden Sub laufen. Das "spart" meiner Ansicht nach ein paar Rechenzyklen. Einige meiner Messmodule sind recht zeitkritisch*, da kommt es schon ein wenig drauf an. Vielleicht hab ich da ja auch einen Denkfehler, dann korrigiere mich bitte ;) Gruss, Echelon *Ich habe einige Module bei denen es wichtig ist Daten in möglichst exakten Zeitabständen zu messen. Unter anderem das Modul bei dem ich den Durchsatz von Netzwerkinterfaces ermittele: Ich kann diesen nicht direkt abfragen sondern nur wieviele Bytes seit der letzten Abfrage durchgelaufen sind. Wenn ich den exakten Zeitraum kenne der seitdem verstrichen ist kann ich daraus aber den Durchsatz errechnen. Allerdings brauche ich da möglichst exakte Zeitabstände. Mit meinem Code funktioniert es auch, die Werte sind fast identisch mit denen die ich mit dem Tools "bmon" und "iftop" messe. Das meinte ich mit Zeitkritisch. Die Tatsache das die Kommunikation mit dem LCD Server recht langsam ist (Ein Schreibvorgang kann schon mal 0.5-0.7 Sekunden dauern)kommt hier erschwerend hinzu. |