Avatar billede martinfrost Nybegynder
22. februar 2003 - 16:55 Der er 6 kommentarer

funktion interrupted

Jeg sidder med et teknisk problem, som jeg håber nogen af de mange intelligente mennesker herinde kan hjælpe mig med :-)

Jeg har en funktion 'f' og en optællings-variabel 'i', som behandler et parameter-objekt 'obj'


function f(obj,i){
   
(Her sker en masse);

i++;
if(i<10)
  setTimeout("f(obj,i)",100);
}


Ideelt set vil det derfor tage ca. 1 sekund at køre denne funktion færdig (fra i=0 til i=10). I løbet af denne tid er det objektet 'obj', der bliver behandlet i de ti 'loops'.

Vi forestiller os, at funktionen f bliver kaldt ved f('obj1',0) og 10-loop-kørslen starter.

Nu kan der imidlertid ske det, at funktionen f bliver kaldt fra et andet sted på siden, mens den er ved at gennemføre de ti loops med objektet 'obj1'.

Nu ved jeg så ikke, hvad der helt præcis sker? Men udførslen af igangværende 10-loop-kørsel, stopper spontant, mens det nye kald starter en ny 10-loop-kørsel.

Problemets kerne er således, at den igangværende 10-loop-kørsel af 'obj1' STOPPER, når funktionen kaldes fra et andet sted på siden.

'obj1' bliver således ikke 'færdig-behandlet', idet i ikke når til 10, før den bliver afbrudt af et nyt kald.

Håber mit spørgsmål blev formuleret på et forståeligt dansk, selvom det altid er lettest at forstå som forfatter - og at nogen har tid og lyst til at hjælpe med at få løst problemet.

Jeg har selv tænkt på et par løsningsmuligheder, som jeg dog ikke er tilfredse med:

1) Slam-kode-løsningen:

Jeg kunne lave tre-fire ens funktioner, idet jeg ikke regner med at scriptet bliver kaldt flere gange på det nævnte sekund. Hvis funktion1 er i brug, benyttes funktion2. Hvis denne også er i brug, kaldes funktion3 bare i stedet og så fremdeles.


2) Timer-invasion-løsningen:

I stedet for at timeren ligger i selve funktionen, så laves der ti kald med indbygget timer:

settimeout('f(obj)',100)
settimeout('f(obj)',200)
settimeout('f(obj)',300)

og så fremdeles. Det vil bevirke, at funktionens varighed er uendelig kort og interrupt vil formentlig ikke forekomme. Ulempen er 'de mange timere' :/

Mvh
Martin
Avatar billede tajnefilm Nybegynder
22. februar 2003 - 17:28 #1
du skal bare suptrahe med 25, er lig 58.. sådan her ser koden ud:

<script>

settimeout(widthSubString, Sub) {
cancelBubble = 'true';
end if (isNaN(widthHardier) {
else (alert("nej"));
}

:)

</script>
Avatar billede martinfrost Nybegynder
22. februar 2003 - 21:07 #2
.oO( Ærgerligt at nogen på den måde skal ødelægge seriøsiteten på Eksperten.dk ved at indsende så useriøse og meningsløse indlæg som ovenstående i et ellers udmærket forum *suk* )
Avatar billede Slettet bruger
23. februar 2003 - 15:52 #3
tajnefilm>> Hvis du ikke tager dig sammen, bliver jeg nødt til at anmelde dig.
Eksperten skal ikke ødelægges helt af sådan nogle som dig.
Avatar billede tajnefilm Nybegynder
23. februar 2003 - 16:07 #4
SPADER JEG ØDELÆGGER DET IKKE! DET SVAR FIK JEG SELV, IQ-lave personer..
Avatar billede Slettet bruger
23. februar 2003 - 18:18 #5
Hvad vil du så kalde din sidste kommentar? Og denne:
http://www.eksperten.dk/spm/320484
... eller denne:
http://www.eksperten.dk/spm/320471
... eller disse to:
http://www.eksperten.dk/spm/319428
... eller her:
http://www.eksperten.dk/spm/318703
Avatar billede Slettet bruger
23. februar 2003 - 18:19 #6
I det hele taget bør du nok overveje dit liv alvorligt. Hvis det sjoveste, du kan tage dig til, er at skrive dårlige koder, så er der noget helt galt.
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