compile preprocessFile

  • Hallo,


    im Video


    legt der Autor Hoegnison dem Zuschauer nahe , globale Funktionen wie folgt zu definieren:

    Code
    1. funktionsname = compile preprocessFile "\pfad\zur\funktionsdatei.sqf";


    Zudem steht die Aussage im Raum, dass man es damit nicht übertreiben soll!
    Was ist der Grund dafür, dass man das nicht übertreiben soll und was ist "übertreiben"?

  • also compile preprocessFile oder auch compile preprocessFileLineNumbers sind methoden um Funktionen zu laden und zu Kompelieren(Das heißst sie besser und schneller ausführen lassen zu können und gewisse sachen wie _fnc_scriptName und _fnc_scriptNameParent funktioniert dann auch). Am besten tut man das am start d.h. Start der mission oder start des spieles. Jedoch wenn man z.b. in Laufe der mission etwas an diesen dateien änden möchte z.b. durch ein tool das extern z.b. server last misst und dann im laufened spiel die sqf verändert. Jedoch ist dies meiner meinung nach nicht wirklich oft nötig bis garnicht daher würde ich sagen entweder benutzt man das einmal in der Init, oder benutzt einfach cfgFunctions womit das selbe nur etwas besser ausgeführt wird.


    D.H. compile nur dann in der Laufenden Mission verwenden wenn man in echt zeit etwas an der SQF verändern möchte oder es in der Init benutzten, jedoch dafür gibt es auch bessere methoden

  • Hallo jokoho482.
    Sorry, so ganz habe ich das noch nicht verstanden.


    Derzeit verstehe ich das so:
    preprocessFileLineNumbers startet den Preprozessor; vermutlich werden Dinge wie includes eingefügt.
    Mit compile wird aus der Zeichenkette SQF-Code.
    Genutzt wird das Ganze, damit _NICHT_ mit jedem Funktionsaufruf die entsprechende SQF-Datei aus dem Dateisystem neu vom Preprozessor gelesen und anschließend kompiliert werden muss; der lauffähige Funktionscode ist im Arbeitsspeicher.


    Wenn das soweit richtig ist, bleibt meine Frage warum man das nicht übertreiben soll?
    Was ist damit gemeint?


    Der Hinweis auf cfgFunctions ist übrigens klasse, danke sehr ;-)

  • ich glaube mir übertreiben meint er


    Code
    1. [color='#FF8040'][COLOR='#191970'][B]while[/B][/COLOR] [COLOR='#8B3E2F'][B]{[/B][/COLOR] [COLOR='#000000']true[/COLOR] [COLOR='#8B3E2F'][B]}[/B][/COLOR] [COLOR='#191970'][B]do[/B][/COLOR] [COLOR='#8B3E2F'][B]{[/B][/COLOR]
    2. [COLOR='#1874CD']_script[/COLOR] [COLOR='#8B3E2F'][B]=[/B][/COLOR] [COLOR='#191970'][B]compile[/B][/COLOR] preprocessFileLine [COLOR='#7A7A7A']"script"[/COLOR]
    3. [COLOR='#191970'][B]sleep[/B][/COLOR] [COLOR='#FF0000']0.1[/COLOR]
    4. [COLOR='#8B3E2F'][B]}[/B][/COLOR][COLOR='#8B3E2F'][B];[/B][/COLOR][/COLOR]

    Made with KK's SQF to BBCode Converter


    Ansonsten habe ich keine Idee warum es sein sollte, höstens noch wenn man ne SQF hat die 2-8 gb hat? oder viele zusammen die so groß sind.

  • Ja ich habe die cfgFunctions damals weggelassen, um den Zuschauer nicht gleich zu erschlagen. Heute würde ich es wahrscheinlich trotzdem behandeln, vlt auch in einem gesonderten Video. Zu dem Thema "übertreiben": Hier habe ich mich schlampig ausgedrückt. Viel mehr sollte es heißen, dass natürlich der schnelle Zugriff auf kosten von Speicher geht. Wie im Video erwähnt sollte man also vermeiden versehentlich unendlich viele Functions in einer while true Schleife auf diese Weise zu erzeugen. Den Speicher komplett mit Functions zu füllen ist natürlich schwierig, doch man hat ja schon viel schlimmes erlebt :D Generell versuchen wir ja eigentlich immer so sparsam wie möglich zu sein und man sollte zumindest im Hinterkopfbehalten, was gerade mit den Anweisungen, die man ausführt, bezweckt wird. (Ich wollte einfach mehr Drama für meinen Spannungsbogen :D)
    Viel Spaß beim Lernen und Basteln ;)

  • korrekter weise sollte man

    Code
    1. foo = compileFinal preprocessFileLineNumbers "bar.sqf"


    machen um zu verhindern das die funktion noch mal überschrieben wird


    mit dem "exxesiv nutzen" ist gemeint das die funktion preprocessFileLineNumbers/preprocessFile/loadFile festplatten zugriff braucht und damit potenziell langsam ist (wodurch sie ein mal am anfang durchgeführt werden sollte)
    das mit dem "nicht zu viele funktionen" ist nur mist den du sofort gern wieder vergessen kannst
    wenn du irgend wann eine SQF skript sammlung von >100MB angesammelt hast solltest du mal den redundanten code raus werfen