Entwickler-Ecke
Basistechnologien - Multitimer?
JayK - Di 03.01.06 17:42
Titel: Multitimer?
Hallo,
ich brauche eine Möglichkeit folgendes zu erreichen:
ich möchte mehrere Programme nacheinander starten lassen. Jeden Programm wird eine Verzögerung in Sekunden zugrordnet. Wie bewerkstelige ich das a) am performantesten, b) am elegantesten.
Einfach dynamisch etliche Timer zur Laufzeit zu erzeugen erfüllt höchstwahrscheinlich weder das eine noch das andere...
Schonmal Danke
JayK
JayK - Mo 09.01.06 18:52
So, 6 Tage isses her... Ich frage mich, ob keiner eine Idee hat, oder ob der Thread untergegangen ist :gruebel: oder beides? :mrgreen:
Wenn ihr das Prob nicht versteht dann sagt es bitte! ;)
Christian S. - Mo 09.01.06 19:27
Ich würde die Verzögerungen aufsteigend sortieren und den Timer dann immer auf das Intervall
zwischen den Verzögerungen einstellen.
Also wenn Du hast
Quelltext
1: 2: 3: 4: 5: 6: 7:
| Programm | Verzögerung -------------------------------- A | 10s B | 5s C | 11s D | 2s E | 5s |
bekommst Du:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Programm | Verzögerung | Intervall --------------------------------------------- | | 2s D | 2s | | | 3s B | 5s | E | 5s | | | 5s A | 10s | | | 1s C | 11s | |
Hoffe, ich habe das irgendwie klar machen können ;-)
JayK - Mo 09.01.06 19:35
Danke sehr, ich werde es probieren, wenn ich wieder Zeit dafür habe :)
JayK - Sa 14.01.06 01:37
Hmm, beim Sortieren stoße ich auf Probleme :gruebel:
das Prog ließt aus einer TSV (Tab Seperated Values) Datei jeweils 5 Werte pro Programm ein: Name, ausführende Datei, Parameter, Verzögerung und eine Option, unter welchen Bedingungen ein Programm gestartet wird.
eine Zeile könnte also so aussehen: "myProgram\tNotepad.exe\tC:\foo.txt\t50\t0"
Wie kriege ich das jetzt nach der Verzögerung sortiert?
Einfach die Verzögerung nach vorne an den String zu packen und dann mit ArrayList.Sort() das ganze zu sortieren geht ja nicht, da ja dann z.B. sowas enstehen könnte: 1 | 11 | 12 | 2 | 24 | 3 | ... und ich hätte es schon gerne so, dass die Progs mit Verzögerung von 2 Sekunden vor denen mit 11 Sekunden starten :tongue:
Wie könnte ich das am besten bewerkstelligen?
Christian S. - Sa 14.01.06 01:54
Hallo!
Ich würde jedes Programm in ein Struct oder so einlesen und die Zeiten dabei direkt in Integer umwandeln. Die wirst Du ja im Endeffekt so oder so brauchen. Das Struct könnte so aussehen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| private struct prog { public string name; public string param; public int delay; public int option; } |
Die verschiedenen Structs in eine Liste
List<prog> packen (anstatt der ArrayList) und sortieren:
C#-Quelltext
1: 2: 3:
| List<prog> l = new List<prog>(); addPrograms(l); l.Sort(Comp); |
wobei Comp so aussieht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| private int Comp(prog p1, prog p2) { if (p1.delay < p2.delay) return -1; if (p1.delay > p2.delay) return 1;
return 0; } |
Grüße
Christian
JayK - Do 19.01.06 18:55
Ich habs jetzt auf jeden Fall mit einem struct gemacht (vorher war es nicht nötig, da hab ich immer gleich die ListViewItems zur Verwaltung genommen ;)), und dann einen InsertionSort Algo "abgewandelt" sodass er die die Delay-Werte vergleicht und danach sortiert. Hab es also garnicht über List, List<> und Sort gemacht ;)
BTW es klappt auch :lol:
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!