myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Auf x Events pro Zeitspanne reagieren und Ausgabe entsprechend true/false setzen
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Auf x Events pro Zeitspanne reagieren und Ausgabe entsprechend true/false setzen

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Xyllan Xyllan ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.07.2020
Beiträge: 3
Entwicklungsumgebung: VisualStudio 2019


Xyllan ist offline

Auf x Events pro Zeitspanne reagieren und Ausgabe entsprechend true/false setzen

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo an alle!

Ich hoffe ich poste hier an der richtigen Stelle! Leider konnte ich via Suche keine passenden Informationen finden, oder ich hab die falschen Fragen gestellt...

Mein Vorhaben:
Ich möchte die "Events" als Schaltflanke (false zu true bzw. auch bei true zu true) zählen. Das soll aber nur für eine gewisse Zeitspanne gültig sein.

Beispiel:
Zeitspanne x = 10 Minuten;
Gut-Signal = false (keine Aktion notwendig);

Wenn in der Zeit x (vom ersten "Event = true" aus gesehen!), 3 mal ein "Event" statt findet, soll eine Ausgabe [true] erfolgen. Bei <3 [false], ergo gut.
Das Signal true oder false würde bei mir zyklisch gesendet werden (als input, alle 1-10 Sekunden), und könnte aber auch in der angegebenen Zeitspanne wechseln! Sollte aber 3 mal von false auf true, oder das true Signal wiederholt auftreten (in summe 3mal pro Zeitspanne) soll mein Ausgabe-Flag auf true gesetzt werden.

Ich habe leider keine Ahnung, wie ich so etwas umsetzen kann und bitte daher um eure kompetente Hilfe/Anregungen/Meinungen.

LG
15.07.2020 22:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.865
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo und willkommen,

ich denke, dafür würde sich eine  Queue<T> gut eignen.
Du speicherst dir dadrin jeweils das "Event-Flag" zusammen mit dem aktuellen Zeitstempel und bei jedem Eintreffen eines Events löschst du zuerst alle älteren Einträge (> 10 min) und überprüfst dann für die aktuellen Queue-Elemente deine Bedingungen (evtl. auch in einem festen Zeittakt die älteren Elemente löschen).

Soll das Programm denn dauerhaft laufen (bzw. was passiert bei einem Ausfall) oder aber auch händisch neu gestartet werden können? Dann solltest du diese Daten auch speichern und neu einladen.
15.07.2020 22:49 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Xyllan Xyllan ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.07.2020
Beiträge: 3
Entwicklungsumgebung: VisualStudio 2019

Themenstarter Thema begonnen von Xyllan

Xyllan ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Vielen Dank für deine Grüße und deine Antwort!

Ich werde dem Hyperlink folgen und eingehend Studieren. Vielen Dank dafür!

Zu deiner Frage:
Ich sollte wohl sagen, dass ich eine Art "Container Programmierung" mache.
Die Signale kommen von "extern". Schnittstellen-Kommunikation hab ich save. Das Prg soll non-stop laufen. Es wird in eine andere Software implementiert, welches als Windows-Dienst läuft. Bei Reboot oder ähnlichem, startet die Applikation selbständig neu.
15.07.2020 23:12 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 14.495
Herkunft: BW


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Dann hilft Dir eine InMemory Queue nicht so sehr, weil Du hier die Daten eben nicht gespeichert hast sondern diese flüchtig sind.

Stattdessen könntest Du einfach ein Redis verwenden.
Redis kann von Haus aus auch Data Expire / TTL, sodass automatisch alle Einträge zB nach 10 Minuten entfernt werden und Du nur das in der Queue hast, was "gültig" ist.
16.07.2020 08:31 Beiträge des Benutzers | zu Buddylist hinzufügen
Xyllan Xyllan ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.07.2020
Beiträge: 3
Entwicklungsumgebung: VisualStudio 2019

Themenstarter Thema begonnen von Xyllan

Xyllan ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe nun eine Lösung gefunden.
Ich verwende nun ein Array, welches mit dem DataTime.now gefüttert wird. Auch habe ich einen counter, der schaut wieviele Signale mit "true" rein kommen. Letzt endlich subtrahiere ich [1] mit [0] und vergleiche es mit meiner Vorgabe von 10 Minuten (wenn Counter==2). Ist das Ergebnis außerhalb der range, wird der TimeStamp[1] in [0] geschrieben, der Counter wird auf 1 gesetzt, und wenn nicht, wird beim nächsten trigger [2] beschrieben, mit [0] subtrahiert und wieder mit der Vorgabe verglichen. Hierbei hat mein Counter dann den Wert 3. Ist es innerhalb der Zeitspanne, dann Alarm, [2]wird zu [1], [1]wird zu [0], counter = 2.
Ist es außerhalb, kein Alarm, Array wird umgeschrieben, wieder berechnet usw...
Was haltet ihr davon?
Soll/Darf ich den Quellcode komplett posten?

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Xyllan am 19.07.2020 11:11.

19.07.2020 10:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 6 Monate.
Der letzte Beitrag ist älter als 6 Monate.
Antwort erstellen


© Copyright 2003-2021 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 25.01.2021 15:39