Hallo zusammen, ich verzweifel grad an einem einfachen Codeschnipsel (Anhang)! Problem: Wenn ich die Funktion "F_Verzoegerung(x,y)" nur ein mal aufrufe funktioniert das Programm wie erwartet, d.h. es wird die korrekte Verzögerungszeit ermittelt. Rufe ich die Funktion F_Verzoegerung(x,y) jedoch ein zweites mal auf, (Freigabe_2=F_Verzoegerung(Sekundentakt,10);) kommt es zur ungewollten Verkürzung der Verzögerungszeit des 1. Aufrufes und dies obwohl alle Variablen als static deklariert sind. Kann mich jemand auf den Weg der Erleuchtung führen, Besten Dank! Grüße je
Du hast da eine lokale Variable First_Run die Du abfragst, ohne zuvor einen Wert zuzuweisen?
Ich würde sagen es liegt daran das du der Variable Sekundentakt vor dem Eintritt in die while Schleife keinen Wert zuweist, in der wihile Schleife machst du das jedoch. Das musst du ändern denke ich
Das ist ja fast wie ein Kapierschutz (kein Schreibfehler!!) wenn eine Variable "First_Run" heißt, in Wahrheit aber das Gegenteil meint. Also eher sowas wie "Second_Run_And_Each_Run_After" ;-) Zudem wird "Freigabe" nie zurückgesetzt. Genausowenig wie das ominöse "First_Run". Solltest du nach Ablauf deiner Zeit "Einschalt_Verzoegerung" nicht diese beiden Werte auch neu initialisieren?
Danke für die Hinweise, dies ist es aber alles nicht, das Programm verhält sich so als ob die Funktion beim 2. Aufruf auf die gleichen lokalen Variablen wie beim 1. Aufruf zugreift (sollten baer beide mit einem getrennten Set an lokalen Variablen arbeiten) - kann so was an Compilereinstellungen liegen??? Gruß je
Jens R. wrote: > das Programm > verhält sich so als ob die Funktion beim 2. Aufruf auf die gleichen > lokalen Variablen wie beim 1. Aufruf zugreift Natürlich tut sie das, du hast die Variablen ja schließlich als static deklariert. Vielleicht solltest du noch mal nachlesen, was static für lokale Variablen bedeutet.
Hi Stefan, static Die Variable ist im Block gültig bzw. im Quell-Modul (also in der C-Datei, in der die angelegt wurde), wenn sie nicht innerhalb eines Blockes angelegt wurde. Statische Variablen werden nicht in Registern oder im Frame der Funktion angelegt, sondern im selben Speicherbereich, in dem auch die globalen Variablen liegen; Konstanten evtl. auch im Flash. Eine lokale Variable, die als static angelegt wird, "überlebt" also das Verlassen des Blocks und hat beim neuerlichen Betreten des Blockes ihren bisherigen Wert. In unterschiedlichen Blöcken angelegte lokale statische Variablen beziehen sich auf unterschiedliche Speicherstellen, genau wie bei lokalen Variablen auch. bin schon seit 2 Tagen am "Suchen" - als was müssen die Variable dann deklariert werden, ihr Inhalt soll für erhalten bleiben bis zum nächsten Schleifendurchlauf, der 2. Aufruf der Funktion in der gleichen Schleife soll aber mit anderen Werten arbeiten? eine Idee? lg je
Fasse die Variablen zu einer Struktur zusammen, erzeuge dann ein Array mit der nötigen Anzahl dieser "Variablen-Sets" und gebe der Funktion per Parameter (Zeiger oder Index) die Info, mit welchem "Set" sie arbeiten soll.
Danke Stefan, Suche damit beendet, hatte static wohl dann doch falsch interpretiert... Gruß je
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.