[c#] Zeitgesteurtes Programm

müsli

Grünschnabel
Hallo,

ich möchte mit meinem Programm jede minute bestimmte werte auslesen und jede 5 minuten eine bestimmte function aufrufen, leider hab ich keine idee wie ich das anstellen soll, und die infos über c Zeitfunctionen sich im Internet rar gesäht. Bitte helft mir
 

Dario Linsky

Erfahrenes Mitglied
Hi,

nimm doch einfach ein Timer-Objekt, sollte eigentlich in der Werkzeugleiste vorhanden sein.
Von dem Objekt musst Du noch das Intervall einstellen und kannst aus dem Timer-Ereignis die Methode aufrufen.

Gruss, Dario
 

müsli

Grünschnabel
hm das gestaltet sich schwierig da ich unter linux programmiere und das unter konsole.

Deswegen brauch ich irgend eine Methode oder einen Denkanstoss um eine bestimmte Aktion nach 1 und nach 5 minuten durchzuführen.
 

Alexander Schuc

crazy-weasel
Wenn du unte rLinux mit Mono arbeitest, wirst du mit dem Timer wirklich nichts anfangen können. Der ist nämlich im Namespace System.Windows.Forms.

Du kannst aber einfach einen neuen Thread erstellen, und den für eine bestimmte Zeit schlafen schicken.

Das sollte auch mit Mono funktionieren.

Mfg,
Alex
 

Alexander Schuc

crazy-weasel
Das mit den Threads geht eigentlich sehr einfach, und soll auch besser sein als das Timer-Objekt.

Code:
using System;

using System.Threading;



namespace CWDev

{

	/// <summary>

	/// Kleiner Timer, realisiert mit einem kleinen Thread.

	/// </summary>

	public class Timer

	{

		private int _interval;

		private Thread _thread;



		#region Delegate & Event

		public delegate void TickEventHandler();

		public event TickEventHandler OnTick;



		protected virtual void Tick()

		{

			if (OnTick != null)

			{

				OnTick();

			}

		}

		#endregion



		/// <summary>

		/// Setzt den Interval des Timers,

		/// ist der Timer/der Thread bereits gestartet,

		/// lässt sich der Timer nicht setzen.

		/// </summary>

		public int Interval

		{

			get { return _interval; }

			set

			{

				if (_thread == null)

					_interval = value;

			}

		}



		public Timer(int Interval)

		{

			_interval = Interval;

		}

		public Timer()

		{

		}



		/// <summary>

		/// Startet den Timer

		/// </summary>

		public void Start()

		{

			_thread = new Thread(new ThreadStart(DoTiming));

			_thread.Start();

		}



		/// <summary>

		/// Startet den Timer.

		/// </summary>

		/// <param name="Interval">Setzt vor dem Starten das Interval neu</param>

		public void Start(int Interval)

		{

			_interval = Interval;

			Start();

		}



		/// <summary>

		/// Stopt den Timer.

		/// </summary>

		public void Stop()

		{

			_thread.Interrupt();

			_thread.Abort();

		}



		/// <summary>

		/// Schaltet den Timer auf Pause

		/// </summary>

		public void Pause()

		{

			_thread.Suspend();

		}



		/// <summary>

		/// Holt den Timer aus der Pause

		/// </summary>

		public void Resume()

		{

			_thread.Resume();

		}



		private void DoTiming()

		{

			Thread.Sleep(this._interval);

			Tick();

		}

	}

}

Habe gleich eine eigenen kleinen Timer geschrieben, der unter Mono funktionieren sollte. Kompilieren lässt sich die Klasse mit mcs. Getestet habe ich nicht, sollte aber gehen.

Bei der angehängten Datei bitte das ".zip" entfernen, tar.gz Archive sind ja hier nicht erlaubt.

Ich hoffe du kannst damit was anfangen,
mfg,
Alex

// Edit
Zur Verwendung noch:
Eine neue Instanz der Timer-Klasse erstellen, das Interval setzen, einen EventHandler hinzufügen, und die Start Methode aufrufen.

Code:
...
Timer myTimer = new Timer();
myTimer.Interval = 1000;
myTimer.OnTick += new TickEventHandler(TuWas);
myTimer.Start();
...
 
Zuletzt bearbeitet:

müsli

Grünschnabel
jab das ist ja schon ganz ok mal sehen ob ich das auch auf einem Konsolen programm hinkrieg denn so wirklich viel ahnung hab ich bis nu noch nicht :).

Ich sollte vielleicht beim nächste Problem post gleich die anforderungen mit rein setzen :)

also so :

Linux 8.0
gcc Konsolen Programm

Brauch nen Timer oder eine Idee um eine Datei Zeitgesteurt jede 1 und eine 2 datei jede 5 minute zu erzeugen, nebenbei noch alle 30 min ein DB eintrag zu machen in einer MYSQL DB.



Ich hoffe so ists besser aber danke für den source den heb ich mir mal gut auf :)
 

Dario Linsky

Erfahrenes Mitglied
Hat zwar nicht wirklich was mit C# zu tun, aber: Hast Du's schonmal mit cronjobs versucht? ;)

Ansonsten könntest Du evtl. auch einfach den aktuellen Timestamp vom Rechner auslesen (sofern das mit C# geht) und in einem eigenen Thread über eine Endlosschleife mit einem bestimmten anderen Timestamp vergleichen.
Allerdings glaub ich nicht, dass das sonderlich performant ist... :rolleyes:
 

Alexander Schuc

crazy-weasel
Code:
gcc Konsolen Programm

Hm, wo du das gerade schreibst.
Arbeitest du nun mit C++ oder C#. gcc ist ein C++ Compiler.
;)

Übrigens, unter Linux könntest du eigentlich einfach ein kleines Programm schreiben, das die Sachen mit der mySQL DB macht, und dann einen (bzw. mehrere) Cronjobs erstellen, welche die Programme regelmässig aufrufen.

Und welche Distribution meinst denn?
Der Linux Kernel ist ja erst bei Version 2.6 oder so.

Mfg,
Alex
 

müsli

Grünschnabel
distri is von suse und ich programmiere Ansi c :).

Der gcc hat spezielle functionen dafür -ansi oder so.
cronjob hab ich dran gedacht.

Aber ist das nicht genau so system belastend? und endlos schleife kann ich nicht machen, da es fürn server ist und so resourcen schonend wie möglich laufen sollte