Ich bin gerade dabei eine etwas trickreichere Sache zu programmieren, wo sich scripte gegenseitig triggern und scripte auch parallel zur Ausführung kommen.
Um genauer monitoren zu können, welche Instanz eines Scriptes gerade welche Ausgabe macht, würde ich gerne noch eine „Tread-Nummer“ vor die Message-Ausgaben machen.
Kann ein Script wissen, in welcher Thread-Nummer es läuft? Wenn ja, über welche Variable kriege ich diese Info?
Hatte zwar auf eine direkte Variable (wie die Magic Konstanten in PHP) gehofft, aber mit dieser Lösung kann ich gut leben. Bringt mich sehr nach vorne.
Die Threadanzahl kann man nicht auch irgendwo her kriegen?
yep. auf das mit dem count() hätte ich auch selber kommen könne.
Aber das unterscheidet halt den alten Hasen vom Frischling.:o
Danke für den Denkanstoss.
Jetzt wäre - ich bin ja ein alter speedfanatiker und als ex Cobol Programmierer auf jede Milisekunde aus - noch zu fragen, ob es schneller ist, zuerst die Threadanzahl zu ermitteln und die Schleife dann so zu bauen oder ob der „Fehlzugriff“ im letzten Durchlauf ohne diese Nummer genauso schnell ist …
Also ich habe klar vor, mein erarbeitetes Wissen weiter zu geben.
Ich sehe vor allem, dass ich mir schon viel Zeit hätte sparen können (und dadurch wäre ich nicht unbedingt schlechter) wenn es mehr „Dokumentation“ und „Guidelines“ gäbe.
Deshalb war ja auch meine Frage an anderer Stelle, ob man nicht doch wieder ein Wiki aufmachen will. Ich würde da jedenfalls mitarbeiten.
Ich sehen da folgende Themen:
Wie gestalte ich meinen Objektbaum am sinnvollsten? (Das können ja mehrere Ansätze sein)
Service-Scripte, die einem das Leben leichter machen
Programmierhilfen (wie z.B. mein Debugging, das noch einige Releases vor sich hat)
Konkrete Lösungen
(ich bastle z.B. an einer relativ ausgefeilten „Repeater“ Funktion für FS20 Befehle. Ziel ist ein selbstlernendes System, das Befehle, die potenziell nicht ankommen „repeatet“ und als Liste die problematischen Adressen auswirft)
Vorschläge für future Releases
Ich mache z.B. einige Sachen heute schon so, dass ich mir Funktionen baue, die mit „IPS_“ anfangen. Wenn man da eine vernünftige Feedback-Loop mit dem Hersteller macht, können später die Scripte einfach mit den nativen Funktionen laufen. Mehr noch: IPS könnte sogar die Parameterstrukturen von künftigen Funktionen vorab veröffentlichen und via intelligenter includes (Versionsabhängig) kann heute schon eine Funtion von morgen verwendet werden.
p.s.
Da ich 20 Jahre+ in der IT gearbeitet habe und u.a. bei der IBM Tochter Lotus Mitglied in einem weltweiten Berater-Council war, habe ich schon ein klitzekleines bißchen Erfahrung, was man so alles erreichen kann - wenn man nur will und der Hersteller ein wenig offen ist.
Ich benutze (noch unter V2.1) folgendes Script als „V2.2+ Library“, das in der Datei „_IPS_V021_next_FUNCTIONS.php“ steht:
/* *******************************************************************
MAKE FUNCTIONS OF LATER RELEASE AVAILABLE FOR RELEASE 2.1
****************************************************************** */
function IPS_GetScriptThreadNumber(){
for ( $i = 1; $i < count(IPS_GetScriptThreadList())+1; $i++ ):
$ThreadInfo = IPS_GetScriptThread($i);
if ($IPS_SELF = $ThreadInfo['ScriptID']):
return($i);
endif;
endfor;
};
function IPS_GetParent($id=0){
$obj = @IPS_GetObject($id);
if ( $obj <> NULL ):
return( $obj["ParentID"]);
else:
return( -1);
endif;
};
Das include dazu, welches in der Datei „include.php“ steht, die von Versionswechsel zu Versionswechsel angepasst wird steht:
$Kernel = floatval(IPS_GetKernelVersion());
if ($Kernel < 2.2):
// LOAD OWN IPS_xxx() FUNCTIONS FROM FUTURE VERSIONS
include „_IPS_V021_next_FUNCTIONS.php“;
ENDIF;
und im code benutze ich schlicht:
include( include.php);
Mache ich morgen ein Update auf V2.2, dann wird einfach die Include Datei modifiziert und aus meiner „_IPS_V021_next_FUNCTIONS.php“ wird „_IPS_V022_next_FUNCTIONS.php“, die Funktionen die dann im IPS drin sind, fliegen aus der PHP raus und gut ist.