[alg] Scheduler

Pagina: 1
Acties:

  • -Klimaks-
  • Registratie: Maart 2001
  • Laatst online: 04-09 10:10
Ik heb een lijst van tijdstippen en bepaalde acties. Een programma moet als het tijdstip is aangebroken die actie uitvoeren. Maar hoe kan ik nu best controleren of er een actie moet uitgevoerd worden. Mijn oplossing was elke x minuten heel de lijst van tijdstippen en acties af te lopen en controleren of er ergens een tijdstip hetzelfde als het huidige tijdstip.

Zijn er manieren hoe ik beter kan doen, wat met een groot aantal acties wordt dit natuurlijk ultratraag...

In those days spirits were brave, the stakes were high, men were REAL men, women were REAL women, and small furry creatures from Alpha Centauri were REAL small furry creatures from Alpha Centauri.
Zaphod in The Hitchhikers Guide To The Galaxy


  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 02-06 23:18
welk OS gebruik je enzo... en moet dit wel in P&W???

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


  • PrutsGoeroes
  • Registratie: Mei 2002
  • Laatst online: 02-04 16:06
Je kan toch in windows je scheduled tasks instellen, zodat hij op een bepaald tijdstip een bepaalde opdracht uitvoerd.

Zit standaard in windows98SE, win2k en winXP.

Bij XP staat het onder: Start --> All Programs --> Accesoirres - System Tools

I wish there was a button on my monitor to turn up the intelligence. There's a button called 'brightness', but it doesn't work...


  • -Klimaks-
  • Registratie: Maart 2001
  • Laatst online: 04-09 10:10
Ben bezig aan eigen programma dat die acties moet uitvoeren. En ben dus op zoek naar beste methode om te controleren of er een actie is waar uitvoeringstijd = huidigetijd.

OS=XP, maar maakt niet veel uit voor methode, dacht ik

In those days spirits were brave, the stakes were high, men were REAL men, women were REAL women, and small furry creatures from Alpha Centauri were REAL small furry creatures from Alpha Centauri.
Zaphod in The Hitchhikers Guide To The Galaxy


Verwijderd

data in array(oid) zetten, sorteren op tijd, en dan om de minuut een binary search uitvoeren om te kijken om/en wat je moet doen.

[edit]
of, misschien nog beter:
data in array(oid) zetten, sorteren op tijd
kijken welke actie als volgende uitgevoerd moet worden.
zolang wachten totdat die is, dmv. Sleep()
acie uitvoeren
kijken hoelang tot de volgende actie, Sleep().
enz.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03-09 13:30

.oisyn

Moderator Devschuur®

Demotivational Speaker

je kunt natuurlijk je taken sorteren, en dan een timer zetten zodat je programma 'wakker' wordt als de eerste taak aan de beurt is. Dan zet je de timer opnieuw met de tijd hoe lang het nog duurt voordat de volgende taak aan de beurt is, enz.

.edit: titel wat aangepast

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Op woensdag 12 juni 2002 23:06 schreef .oisyn iets slims
Ja, dat bedoel ik. ;)

  • -Klimaks-
  • Registratie: Maart 2001
  • Laatst online: 04-09 10:10
Bedankt voor de snelle reacties & de simpele oplossing. Dat zal heel wat sneller gaan dan mijn lijstje-langs-lopen :)

In those days spirits were brave, the stakes were high, men were REAL men, women were REAL women, and small furry creatures from Alpha Centauri were REAL small furry creatures from Alpha Centauri.
Zaphod in The Hitchhikers Guide To The Galaxy


  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 01:20

Delphi32

Heading for the gates of Eden

Ik heb hier ooit een component voor geschreven (TStopWatch) die in feite een timer is maar dan een die aftelt. Mocht je Delphi gebruiken als ontwikkelomgeving dan mag je contact met me opnemen.

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 00:27
Priority queue, met tijd als ordering.

Checken wat het verschil is tussen tijd Nu en tijd eerste event,
sleep() voor die periode,
execute actie,
remove uit priority queue,
if (!queue.empty() ) goto begin.

edit:
eigenlijk net zoals .oisyn, maar priority queues kun je snel nieuwe elementen aan toevoegen zonder alles telkens opnieuw te sorteren.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Op woensdag 12 juni 2002 23:06 schreef .oisyn het volgende:
je kunt natuurlijk je taken sorteren, en dan een timer zetten zodat je programma 'wakker' wordt als de eerste taak aan de beurt is. Dan zet je de timer opnieuw met de tijd hoe lang het nog duurt voordat de volgende taak aan de beurt is, enz.
Misschien is het ook handig om elke keer als je programma wakker wordt even te checken of het lijstje met taken nog wel actueel is. Je kunt dan tenminste ook de scheduling 'live' aanpassen.

With the light in our eyes, it's hard to see.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Op donderdag 13 juni 2002 11:35 schreef Bobco het volgende:

[..]

Misschien is het ook handig om elke keer als je programma wakker wordt even te checken of het lijstje met taken nog wel actueel is. Je kunt dan tenminste ook de scheduling 'live' aanpassen.
Dat kun je beter doen op het moment dat er een nieuwe taak ingevoegd wordt. Als de eerst volgende taak morgen is, en je voegt 1 toe voor over een half uurtje wil je de huidige sleep natuurlijk ook wel ff wat eerder afbreken :)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Op donderdag 13 juni 2002 12:05 schreef Janoz het volgende:

Dat kun je beter doen op het moment dat er een nieuwe taak ingevoegd wordt. Als de eerst volgende taak morgen is, en je voegt 1 toe voor over een half uurtje wil je de huidige sleep natuurlijk ook wel ff wat eerder afbreken :)
je hebt gelijk, maar dan moet je dus wel wat actiever gaan letten op de wijzigingen die in de scheduling data worden aangebracht. Als je dat soort dingen echt netjes wilt doen zul je toch met een hoge frequentie de data moeten lezen. Oplossingen met data in een file zijn natuurlijk simpel te doen met timestamps, met een database wordt het alweer iets lastiger...

With the light in our eyes, it's hard to see.


  • -Klimaks-
  • Registratie: Maart 2001
  • Laatst online: 04-09 10:10
Op donderdag 13 juni 2002 12:27 schreef Bobco het volgende:

[..]

je hebt gelijk, maar dan moet je dus wel wat actiever gaan letten op de wijzigingen die in de scheduling data worden aangebracht. Als je dat soort dingen echt netjes wilt doen zul je toch met een hoge frequentie de data moeten lezen. Oplossingen met data in een file zijn natuurlijk simpel te doen met timestamps, met een database wordt het alweer iets lastiger...
Wijzigingen zijn enkel toevoegen of verwijderen van acties, dus zo'n probleem is het niet om op die wijzigingen te letten imho

In those days spirits were brave, the stakes were high, men were REAL men, women were REAL women, and small furry creatures from Alpha Centauri were REAL small furry creatures from Alpha Centauri.
Zaphod in The Hitchhikers Guide To The Galaxy


  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Op donderdag 13 juni 2002 12:55 schreef -Klimaks- het volgende:
Wijzigingen zijn enkel toevoegen of verwijderen van acties, dus zo'n probleem is het niet om op die wijzigingen te letten imho
Dat is toch wat ik zeg? Het punt is dat als je een structuur in je applicatie opbouwt die gebaseerd is op data in een file, je die structuur in de applicatie elke keer moet controleren/updaten als er een wijziging is in de data in de file.

Simpel voorbeeldje:

14:00 Taak A
15:00 Taak B
16:00 Taak C

Je start je applicatie om 13:00 en die leest netjes de gegevens in en gaat vervolgens de file in de gaten houden door om de zoveel tijd wakker te worden en de timestamp van de file te vergelijken met de timestamp die er op stond toen de laatste keer de file gelezen werd.

Vervolgens pas ik de file om 13:15 aan zodat die er als volgt uit komt te zien:

12:00 Taak A
15:00 Taak C
16:00 Taak B

Alle taken staan er nog gewoon in, alleen is de volgorde van uitvoeren behoorlijk veranderd en moet je dus de structuur in je applicatie weer opnieuw opbouwen. Het is dus inderdaad niet zo moeilijk, maar je moet het wel consequent doen...

With the light in our eyes, it's hard to see.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Je kunt gewoon de data bijhouden in het geheugen van het programma. Het hoeft niet in een file. Je zou het wel kunnen mirroren en ervoor zorgen dat de priority queue dezelfde elementen heeft als het bestand op schijf.

Zorg ervoor dat bij het starten de file wordt ingelezen en bij veranderingen het geheugen en het bestand worden aangepoast, en je hebt als het goed is geen problemen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1