Avatar billede difn Nybegynder
20. marts 2003 - 10:45 Der er 14 kommentarer og
2 løsninger

Periodisk udførelse af metode

Er der en funktion i java der kan udføre en funktion, for eksempel en gang i døgnet på et bestemt tidspunkt. Jeg skal have et program til at stå og køre, det eneste den skal gøre er at opdatere en databasen hver nat...
Avatar billede hsg Nybegynder
20. marts 2003 - 10:48 #1
Hvis programmet alligevel står og kører døgndrift så kig på Thread.sleep
Avatar billede arne_v Ekspert
20. marts 2003 - 11:17 #2
Prøv og kig på java.util.Timer !
Avatar billede arne_v Ekspert
20. marts 2003 - 11:26 #3
Du laver en klasse som extends TimerTask, i dit program laver du så et nyt
Timer objekt som du bruger til at schedulere at din klasse skal
køre med et vist interval.
Avatar billede _carsten Nybegynder
20. marts 2003 - 11:29 #4
Hvis vi snakker Windows, er det hurtigste vel at bruge Scheduler
(Planlagte opgaver/Opgavestyring) til at starte og afslutte programmet.
Avatar billede arne_v Ekspert
20. marts 2003 - 11:31 #5
Følgende ret banale eksempel:

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;


public class TimerTest {
    public static void main(String[] args) {
        (new Timer()).schedule(new MyTimer(), new Date(), 10000);
    }
}

class MyTimer extends TimerTask {
    public void run() {
        System.out.println("tik");
    }
}

skriver "tik" ud hver 10. sekund.
Avatar billede difn Nybegynder
20. marts 2003 - 11:47 #6
det her program indeholder ingen tråde. Derfor skal det sådan set bare være i main at metoden skal kaldes fra. Kan man køre en while, der hver gang klokken er noget bestemt kører metoden. Eller skal man angive det i millisek.
Avatar billede arne_v Ekspert
20. marts 2003 - 12:06 #7
Du kan sagtens lave en:

for(;;) {
  // do something
  Thread.sleep(24*60*60*1000);
}

men så kan dit main program jo ikke lave andet.

Fordelen ved et TimerTask er at main kan lave noget andet.

Er det et krav at der ikke må bruges tråde ?
Avatar billede arne_v Ekspert
20. marts 2003 - 12:09 #8
Du kan både teste for tid og bare vente i et interval.

Timer klassen har forskellige metoder som er glimrende til at håndtere
den slags.

Ved at bruge den undgår du selv at skulle bøvle med den logik.
Avatar billede difn Nybegynder
20. marts 2003 - 12:21 #9
jo, tak...jeg tror bare jeg laver for sætningen. Der er nemlig kun tale om en for sætning. Problemet er bare at den skal starte den kl 4 om natten. Kan man ikke lave noget med at den bare starter hvergang der. I stedet for at få den til at sleepe. Så skal den jo startes på dette tidspunkt
Avatar billede arne_v Ekspert
20. marts 2003 - 12:28 #10
Du kan jo få tiden nu og derfra udregne intervallet til
kl. 4 næste morgen.

Men altså måske er Carstens forslag on scheduler (Windows) eller
cron (Unix) nemmere !
Avatar billede difn Nybegynder
20. marts 2003 - 12:29 #11
jeg har ikke styr på scheduler. Hvad er dette.... Er dette noget der kan starte javaprogrammet op en gang i døgnet eller sådan noget
Avatar billede fsconsult.dk Nybegynder
20. marts 2003 - 12:29 #12
Hvis den kun skal køre et par enkelte gange i døgnet, ville jeg anbefale dig at benytte et scheduleringsværktøj som f.eks. cron på *nix bokse eller MS SQL Server Agent på Windoze bokse (hold dig laaangt væk fra AT "servicen").
Avatar billede arne_v Ekspert
20. marts 2003 - 12:32 #13
Date d = new Date();
        long t = d.getTime();
        t = t % (24 * 60 * 60 * 1000);
        long dt;
        if(t < (4 * 60 * 60 * 1000)) {
            dt = (4 * 60 * 60 * 1000) - t;
        } else {
            dt = (24 * 60 * 60 * 1000) - t + (4 * 60 * 60 * 1000);
        }

så burde dt indeholde antal millisekunder til næste 04:00.

[ikke testet men logikken ser fornuftig ud]
Avatar billede arne_v Ekspert
20. marts 2003 - 12:33 #14
scheduler er en feature i operativ-systemet hvor du kan bede det starte
et program på et bestemt tidspunkt (f.eks. hver morgen kl. 4).
Avatar billede difn Nybegynder
20. marts 2003 - 12:35 #15
jeg tager og giver jer 60/40 til arnes fordel. Ved ikke hvilken metode jeg vil vælge, men scheduler virker mest logisk, da det kun er en gang i døgnet. Tak for svarende
Avatar billede _carsten Nybegynder
20. marts 2003 - 12:48 #16
Undskyld mit fravær, men jeg sad med forbene oppe i madkassen.

Scheduler er et nemt lille værktøj, bruger det selv hver nat til at starte
og afslutte et program hver nat.

Win98 DK, findes her:
Fra cmd:  C:\WINDOWS\EXPLORER.EXE ,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\::{D6277990-4C6A-11CF-8D87-00AA0060F5BF}

eller:
Start | Programmer |Tilbehør | Systemværktøjer | Planlagte opgaver
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester