Kald rutine på specifike tidspunkter på en dag.?

Tags:    vb.net

Hejsa.

Håber der er en der kan guide mig i den rigtige retning.
Jeg skal bruge en kode der starter noget update på nogle bestemte tidspunkter på dagen. Tiderne er forskellige hver dag.
Min nuværende kode ser sådan ud.
Og det virker som sagt ikke. da den tager den sidste klokkeslæt "16:15"
Det jeg vil have den til er at start update "15:00" derefter 15:35" osv.
Klokkeslæt kommer fra en database fil og de tider som timer4update har i koden kan være forskellige.

Fold kodeboks ind/udVBDotNet kode 


Ved ikke om dette er den rigtig retning, har slet ikke arbejdet med timer funktionen før i vb.net. Det burde jo være nemt.

Mvh.
Rl34dk
Robert Larsen





6 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
Hej Robert

Du kunne kigge lidt på Task Scheduler.



Hej Robert,

Dette vil ikke give dig den bedste løsning på problemet, men forhåbentligt en bedre forståelse for programmeringssproget.

Grunden til at den kun tager sidste værdi, er fordi du bruger en variabel som kun kan indeholde én værdi.

Forestil dig, at det er en go´ gammeldags clockradio.

Først indstiller du alarmen til 15:00, så til 15.35 og til sidst 16.15.

Hver gang du laver et skift og fortæller den et tidspunkt, så glemmer den det sidste.

Du kan lave et array, som kan indeholder flere værdier:

Dim time4update(2) As String

Når du indsætter værdierne:

time4update(0) = "15:00"
time4update(1) = "15:35"
time4update(2) = "16:15"


i din tick, henter du et tidspunkt fra et array, et tidspunkt af gangen og laver dit check:
For Each timer In time4update
If timer= Now.ToString("HH:mm") Then
'
End If
Next




Hej navnebror

Du kan også bruge dit operativ systems schedulerings mekanisme. På Linux ville jeg bruge 'cron' og jeg er sikker på, at Windows (eller hvad du nu bruger) har noget lignende.



Hejsa.
Tak for jeres hjælp. :D
Lige en opdatering på hvad jeg er kommet frem til.

Fold kodeboks ind/udVBDotNet kode 


Dette ser ud til at køre. Bud på forbedering og forslag, modtages gerne.
Mvh.
rl34dk
(Den ene :B )Robert Larsen



Vil sige at der er nogle forbedringer du kan gøre.
Din liste KRÆVER at du starter med laveste tidspunkt før du kommer til næste, for din counter tælles ikke op før den kommer til det tidspunkt den er nået til.

Hvis din liste er:
Alarms.add("12:29");
Alarms.add("12:19");
Alarms.add("12:39");

så vil du først læse efter 12:29 og ikke ligge mærke til 12:19 for den kommer ikke til den før du har været forbi 12:29.
Så i stedet for at have din counter, så løb altid hele listen igennem.

Fold kodeboks ind/udCSharp kode 


Din updateBln kan du sætte til en startværdi og hvis det er nødvendigt sætte den til den nye, det er mere optimalt fordi du ikke sætter den til det samme altid. Du har updateBln til "True" altid, medmindre den rammer en alarm, så du kunne udenfor loopet sætte den til True, og hvis den rammer en så sættes den til false.
Når det så er sagt så kan jeg ikke se hvad du bruger den til?

Mit eksempel i toppen baserer sig også på brug af List(Of DateTime) Alarms = new List(Of DateTime), fordi du så ikke skal specificere længden på dit array og kan tilføje så mange alarmer du ønsker uden at skulle rette i din kode.

Derudover synes jeg altid det er en god ide at typedefinere alt du kan komme til så fx "For Each Timer In _time4Update" skulle blive til "For Each Timer as DateTime In _time4Update".
Du kan tilføje option strict i toppen af dokumentet som sikrer du får compile-time fejl i stedet for run-time fejl.

Når jeg kommer hjem kan jeg godt give dig lidt flere optimeringer :)



Indlæg senest redigeret d. 23.09.2014 13:00 af Bruger #17215
Hej

Nu kan jeg ikke helt gennemskue hvor meget du har brug for, men Quartz .net virker super godt. Du kan bruge Cronmaker til at regne ud hvornår den skal køre.



t