Entwickler-Ecke
Basistechnologien - Programmieren einer Einschaltverzögerung
Mr Bean - So 07.12.08 22:41
Titel: Programmieren einer Einschaltverzögerung
Hallo
Ich möchte mich erstmal vorstellen und hallo zu allen hier im Forum sagen. Ich studiere Elektrotechnik. Hier haben wir unter anderem ein Fach Namens Informatik. Wir arbeiten hier mit Visual Studio 2008 und programmieren in C#.
Ich habe hier die Aufgabe bekommen eine Klasse zu programmieren die eine Einschaltverzögerung darstellt. Ihr wird also eine Zeit (Double) und ein Signal (bool) übergeben. Zurückgeliefert werden soll der Ausgang (bool) und die abgelaufene Zeit (double).
Mir fehlt da immernoch etwas der Ansatz. Ich habe jetzt etwas im Internet gestöbert und bin immer wieder auf System.Windows.Forms.Timer gestoßen. Ich bin mir aber nicht ganz sicher ob das der richtige für mein Problem ist.
Könnt ihr mir da weiter helfen und vielleicht auch noch ein paar gute Tips zum generellen Programmieren der Klasse geben?
Vielen Dank schonmal im Voraus!
Gruß
Bean
Ralf Jansen - So 07.12.08 23:58
Einschaltverzögerung hört sich nach einem synchronen Vorgang an. Heißt solange bis die Zeit abgelaufen ist soll die Anwendung nichts anderes tun.
Insofern wäre eher ein Slepp über System.Threading.Thread.Sleep das passende Stichwort.
Wenn es doch etwas asynchrones sein soll ist ein Timer eine gute Wahl. Du solltest aber eher auf System.Timer schauen und nicht den von Winforms verwenden. Zumindest solange du keine GUI programmierst und den Timer über den Winforms Designer einstellen möchtest.
Ansonsten ist die Fragestellung noch etwas unklar.
Ist Signal = Ausgang? Warum ist die Zeit in Double? Und in welcher Einheit?
Ich hätte gedacht an unseren Hochschulen gibts deutlichere Aufgabenstellungen.
Mr Bean - Mo 08.12.08 00:39
Hallo
Vielen Dank für die Antwort!
Also die Aufgabe ist eigentlich mehrere Logik Gatter zu implementieren (NAND,OR, RS, TON etc.). Mir fehlen eigentlich nur noch das RS und das TON. Die anderen hab ich schon hinbekommen (waren auch nicht so schwer...) Warum die Zeit in Double ist kann ich leider auch nicht sagen, das steht so in der Aufgabenbeschreibung. Die Einheit der Zeit ist sec.
Der Ausgang ist im Endeffekt nur eine Variable, die ich dann wieder an eine andere Klasse zurück gebe.
MFG
Bean
Mr Bean - Mo 08.12.08 11:37
Hallo
So habe das nun mal mit folgendem Code probiert:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| public TOFElement(uint ID, InPort start, InPort time) : base(ID) { System.Timers.Timer TON = new System.Timers.Timer(); TON.Elapsed += new System.Timers.ElapsedEventHandler(result=true); TON.Interval = time; TON.Enabled = start; } |
Das ist für mich auch plausibel, ich braucht jetzt ja aber noch irgendwoher die Zeit die verstrichen ist, die soll ich auch mir ausgeben. Konnte da aber nirgends etwas brauchbares finden.
Könnt ihr mir weiterhelfen?
Gruß
Bean
Moderiert von
Kha: C#-Tags hinzugefügt
Kha - Mo 08.12.08 17:10
Mr Bean hat folgendes geschrieben : |
C#-Quelltext 1:
| TON.Elapsed += new System.Timers.ElapsedEventHandler(result=true); | |
Das dürfte so nicht funktionieren.
Mir ist immer noch nicht klar, was mit dem Zeit-Double passieren soll. Wenn es darum geht, eine Methode/den Konstruktor diese Zeitspanne warten zu lassen, ist Thread.Sleep der richtige Weg.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!