Avatar billede warpgiga Nybegynder
10. august 2001 - 14:24 Der er 10 kommentarer og
1 løsning

Sleep funktion i javascript, som ikke bruger 100% CPU...

Hej med jer!

Jer er ved at lave et test program, der kan accesse og styre andre websites via JS.

Men jeg har i fobindelse med synkronisering af fjern-sitet brug for en funktion der kan vente noget tid, og først returne når tiden er gået.

Det er meget vigtigt at funktionen først returnerer når tiden er gået..! ;)

Jeg har lavet et par forsøg selv, men de går alle amok i en fast-loop som sløver systemet, og knalder CPU måleren i top.. (W2K)

her er det sidste forsøg jeg har lavet:
(den går amok i selve while løkken).

var snoozeTmp;
var snoozeSleeping = false;

function snooze(milliSecs) {

    snoozeTmp = milliSecs/10;

    while(snoozeTmp >= 0) {
   
        if(snoozeSleeping == false) {
           
            snoozeSleeping = true;
            setTimeout(\"doSnooze()\", 100);
        }

    }

    return 0;

}


function doSnooze() {

        snoozeTmp--;
        snoozeSleeping = false;
}

- God weekend ;)

- Skal nok poste en løsning hvis jeg selv finder en ;)
Avatar billede roenving Novice
10. august 2001 - 15:05 #1
Kan du ikke bare ...

function goerHvadDuVil {
  //goerHvadDuVil
}

-- og så der hvor du skal noget:

setTimeout(goerHvadDuVil(), milliSecs)

den burde da ikke æde så meget !!·]

hth
jes
Avatar billede roenving Novice
10. august 2001 - 15:07 #2
Ups ...

function goerHvadDuVil() {

selvfølgelig ;-)
Avatar billede warpgiga Nybegynder
10. august 2001 - 15:11 #3
Som sagt:

Det er meget vigtigt at funktionen først returnerer når tiden er gået..! ;)
Avatar billede jakoba Nybegynder
10. august 2001 - 16:47 #4
Beklager. hvis du vil have det som et funktionskald hvor funktionen først returnerer efter xxx millisekunder vil det nødvendigvis blive et \"busy wait\" program der optager næsten al browserens cpu tid.

function busyWait( millisecs );
    var nu = new Date(); 
    sluttid = nu.valueOf() + millisecs;
    for ( ; ; ) {
        var da = new Date();
        if ( da.valueOf() >= sluttid ) break;
    };
}; //end bysyWait( number );

Dt virker, men jeg tvivler på du vil bryde dig om det. Og efter en tid kommer IE og spørger \"Hit javascript kører grumme længe, sku vi ikke stoppe det?\" :-)

mvh JakobA
Avatar billede jakoba Nybegynder
10. august 2001 - 16:50 #5
Du konner til at skrive dit script om så den process der skal indeholde et vent deles op i to. Så er det nemt at bruge setTimeout(...) til at få startet anden sektion en vis tid efter den første.
Avatar billede warpgiga Nybegynder
11. august 2001 - 02:31 #6
Hej JakobA: Det er det samme resultat jeg er kommet  til..
Men den sløver systemet alt for meget, jeg vil have den til at være IDLE, altså bruge så lidt cpu som muligt, samt overholde ovenstående specs ;) Men mange tak for svaret ;)
Avatar billede warpgiga Nybegynder
13. august 2001 - 11:33 #7
ok ok, jeg ved godt det måske er umuligt ;) men kan i andre eksperter ikke lige give jeres saglige mening ;) det ville være cool.. mvh Fini
Avatar billede jakoba Nybegynder
13. august 2001 - 13:00 #8
Det kan sågar være jeg tager fejl :-)). der er jo fx scrollBy funktionen

Hvis du kører følgende funktion i et vindue med scroll:

var stop = false;    // sættes true for at få funktionen til at returnere

function ventEnTid( ) {
    while ( !stop ) {
        scrollBy( 0, 5 ); 
        scrollBy( 0,-5 );  // nr 2 kald afventer skærmrefresh
    };
}; //end ventEnTid( )
     
kan det godt være du får den ikke-busy vent vi ønsker. Det er vigtigt at vinduer virkelig kan scrolle de 5 pixel op og ned. evt med ensfarvet baggrund for det er ulækker at kikke på sådan noget rysteri.

Ikke testet, men prøv.

mvh JakobA
Avatar billede warpgiga Nybegynder
14. august 2001 - 01:21 #9
he he, tja.. hvis det er the only way ;) så må det jo du..

jeg vender tilbage ;)
Avatar billede warpgiga Nybegynder
14. august 2001 - 01:22 #10
Forresten:

Det behøver kun at virke i IE 5.5+
Avatar billede warpgiga Nybegynder
10. april 2003 - 17:11 #11
out of date

cased closed

Mvh Fini
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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