Geschwindigkeitsmesser im Thread. Denkanstoß / Mein Fehler?

Fridulin

Erfahrenes Mitglied
Hallo Leute,

ich möchte mir gerne einen Timer bauen der mir sagt wie schnell eine Datei gesendet wird.
Ich frage in einer While Schleife die aktuelle gesendete Byte Zahl ab. So in dieser While Schleife habe ich jetzt einen Thread aufgerufen der nichts weiteres macht als 1 Sek zu Warten, währendessen die While Schleife weiterläuft (Sie befindet sich in einen anderen Thread).
Ich habe bis jetzt mir folgendes überlegt. Allerdings klappt es nicht so wie ich es mir denke.
Code:
using (BinaryReader reader = new BinaryReader(fstream))
				{
					
					while (s_length > s_read)
					{
						double gesgr = s_read;
						
						if (gesgr < 1000000)
					{
						gesgr = gesgr / 1000;
						gesgr = Math.Round(gesgr, 2);
						gesendet.Text = gesgr + " KB";
					}
					
					if(gesgr >= 1000000)
					{
						gesgr = gesgr / 1000000;
						gesgr = Math.Round(gesgr, 2);
						gesendet.Text = gesgr + " MB";
					}
					
					
					if(sek==false)
					{
					sek = true;
					geswalt = s_read;
					double gesalt = s_read;
       ThreadStart job = new ThreadStart(ThreadTimer);
        Thread thread = new Thread(job);
        thread.Start();
       zeit = s_read - geswalt;
       zeit = Math.Round(zeit, 2);
       geschw.Text = zeit + " /s";
        	
....
.... Hier unten lied er nur den Stream weiter runter
....
				}

Wobei mein Thread wie schon erwähnt folgender maßen ausieht. Er Soppt wirklich nur die Zeit.
Code:
void ThreadTimer()
    	{
	                geswalt = geschwalt2;
		Thread.Sleep(1000);
		sek = false;
	}

Zur Begriffserklärung geswalt, geschwalt2, sek sind globale Variablen. "sek" ist z.B. dafür da das die While Schleife den ThreadTimer nicht immer wieder aufrufen kann, sondern erst wenn er 1 Sek stehen bleibt damit die Zeit anhält und dann erst wieder zur neuen Berechnung aufrufen kann. Die anderen beiden sind nur zu Testzwecken drinne, diese eigentlich keine sonderliche Beachtung geschenkt werden sollte.

Ich dachte mir das Programm so. Vor dem Thread aufruf Speichert er die aktuelle gelesene Größe, Speichert diese in der If schleife und wenn der Thread durchgelaufen ist, Speichert er die tatsächliche gesendete Größe in einer anderen Datei ab. Danach muß man diese einfach von ein ander abziehen und schon hat man die Zeit also sprich 1 Sek wieviel Byte er gesendet hat.
Allerdings Funktioniert es nicht so wie ich es denke. Entweder bleibt es immer 0 oder er steigt unaufhörich weiter hoch, nach merkwürdigen Schema wo ich keine Logik drinne steckt bzw. ich keine erkennen kann.

Ich hoffe einer von euch hat einen Denkanstoß für mich oder sieht was ich falsch mache, ich komme damit leider einfach nicht weiter.

Grüße und Vielen Dank
Fridulin


--- Edit ---

Also die "merkwürdige Zahl" habe ich jetzt identifizieren können, daß ist die aktuelle Downloadgröße der Datei Zeitversetzt. Ich bin also schon irgendwie auf die halbwegs richtigen Weg, hoffe ich.

Grüße


--- Edit ---

Ich habe es jetzt selber hinbekommen, wenn es jemanden Interessiert wie der Code aussieht, dann kann ich hier den Code Posten.

Grüße und Trotzdem Danke
Fridulin
 
Zuletzt bearbeitet:

Neue Beiträge