
get_eval_cost
*************


BEMERKUNGEN
===========

   Der Maximalwert betraegt zur Zeit 1.500.000 Ticks (Stand: 2020).

   Sollten die Ticks waehrend der Ausfuehrung irgendwo auf 0 fallen,,
   wird ein Fehler der Art "too long eval" erzeugt.

   Diese Funktion dient dazu, solche Fehler zu verhindern oder genauer
   zu lokalisieren an welchen Stellen im Code wieviel Ticks verbraucht
   werden.


BEISPIELE
=========

      // Ticks zaehlen
      void foo()
      {
        int prev, used, i;

        prev=get_eval_cost(); // Merken, was bis hierhin verbraucht wurde
        for (i=0;i<=1000;i++) // Dann kommt der zu testende Code, zB eine
        {                     // Schleife
          ...
        }
        used=prev-get_eval_cost(); // Berechnung der Differenz
        printf("Die Schleife verbrauchte %d Ticks.\n", used);
      }

      // Ticks im Auge behalten bei der Ausfuehrung
      foreach(...)
      {
        ... // komplexer code
        if (get_eval_cost() < 100000)
          break;
      }
