Autor Beitrag
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Di 03.01.06 17:42 
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


Zuletzt bearbeitet von JayK am Mo 09.01.06 19:37, insgesamt 1-mal bearbeitet
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
Programm      |      Verzögerung
--------------------------------
A             |      10s
B             |      5s
C             |      11s
D             |      2s
E             |      5s


bekommst Du:
ausblenden 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 ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Mo 09.01.06 19:35 
Danke sehr, ich werde es probieren, wenn ich wieder Zeit dafür habe :)
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:
ausblenden 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:
ausblenden C#-Quelltext
1:
2:
3:
List<prog> l = new List<prog>();
addPrograms(l);
l.Sort(Comp);


wobei Comp so aussieht:
ausblenden 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
JayK Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: 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: