gibt es eine art 'sleep-funktion' ?
Wowbagger
- javascript
0 Stefan Muenz0 Wowbagger0 Stefan Muenz0 Mirko0 Patrick
0 Michael N.
Hallo 'SelfHTML gemeinde'...
Ich suche eine möglichkeit in javascript einfach nur eine bestimmte anzahl milisekunden lang zu warten. Gibt
es vielleicht eine funktion wie Sleep(ms) oder Idle(ms)?
Ich kenne setTimeout(), aber die ist für meine zwecke unbrauchbar, weil ich ja keine andere funktion aufrufen oder überhaupt irgend etwas machen möchte außer warten...
Kann mir jemand helfen?
Danke...bis dann
/*,*/
Wowbagger
Hallo Wowbagger
Ich kenne setTimeout(), aber die ist für meine zwecke unbrauchbar, weil ich ja keine andere funktion aufrufen oder überhaupt irgend etwas machen möchte außer warten...
Ohne setTimeout geht's meines Wissens nicht. Kannst ja eine leere Funktion benutzen, etwa so:
function Nix()
{ /* gar nix weiter */ }
Anweisung ...;
Anweisung ...;
window.setTimeout("Nix()",5000);
Anweisung ...;
Dann wartet er im Programmablauf 5 Sekunden, ruft die Funktion auf, in der nix passiert, und macht dann weiter.
viele Gruesse
Stefan Muenz
Danke... wow, das ging ja schnell :-o
Ohne setTimeout geht's meines Wissens nicht. Kannst ja eine leere Funktion benutzen, etwa so:
function Nix()
{ /* gar nix weiter */ }Anweisung ...;
Anweisung ...;
window.setTimeout("Nix()",5000);
Anweisung ...;Dann wartet er im Programmablauf 5 Sekunden, ruft die Funktion auf, in der nix passiert, und macht dann weiter.
Daran hatte ich auch schon gedacht, aber das funktioniert so leider nicht :-(
Er wartet zwar 5 sek. bis er Nix() aufruft, arbeitet aber bis dahin brav all das ab, was nach der setTimeout anweisung noch kommt (setTimeout() ist quasi so eine art timer-interrupt-handler)
In meinem speziellen problem (es geht 'mal wieder um's thema animierte hover-buttons :-)) *darf* er aber nicht mit dem programmablauf weitermachen, bevor die wartezeit um ist (ich brauche quasi eine art for()-schleife mit kalkulierbarer ausführungszeit (=prozessorunabhängig!)
Kann man hier vielleicht mit funktionen zur uhrzeit was tricksen?
Bis denn dann...
/*,*/ (heute eher @,@)
Wowbagger
Hallo Wowbagger
Er wartet zwar 5 sek. bis er Nix() aufruft, arbeitet aber bis dahin brav all das ab, was nach der setTimeout anweisung noch kommt (setTimeout() ist quasi so eine art timer-interrupt-handler)
Dann stopf doch den ganzen Code, der "danach" kommt, in die Funktion. Die Funktion ist dann einfach eine Art Unterprogramm, das zu einem bestimmten Zeitpunkt aufgerufen wird.
viele Gruesse
Stefan Muenz
Hi!
Daran hatte ich auch schon gedacht, aber das funktioniert so leider nicht :-(
Er wartet zwar 5 sek. bis er Nix() aufruft, arbeitet aber bis dahin brav all das ab, was nach der setTimeout anweisung noch kommt (setTimeout() ist quasi so eine art timer-interrupt-handler)
Jepp.
Du könntest aber z.B. eine Variable setzen, wo du gerade warst, und diese dann beim nächsten Funktionsaufruf abfragen:
var wobinich=1;
function irgendwas()
{
if (wobinich==1) {
/* mach irgendwas */
setTimeOut("irgendwas()",5000);
}
if (wobinich==2) {
/* mach weiter */
setTimeOut("irgendwas()",5000);
}
wobinich++;
}
Aber Vorsicht, daß du nicht das Flag im if-Bereich hochsetzt und dadurch die nächsten Bedingungen wahr macht!
Kann man hier vielleicht mit funktionen zur uhrzeit was tricksen?
Könnte etwa so gehen:
jetzt = new Date();
biswann = jetzt.getTime() + 5000;
while (jetzt.getTime() < biswann) {}
Aber ich nehme stark an, daß die setTimeOut-Methode CPU-freundlicher ist...
Bis denn dann...
Kommt mir jetzt irgendwie bekannt vor... ;)
Ciao,
Mirko
Hallo Mirko!
Bis denn dann...
Kommt mir jetzt irgendwie bekannt vor... ;)
Tja.. manche Audrucksformen werden mit der Zeit beliebt!!! Aber so lange darunter nicht PAF (patrickausfrankfurt) kommt, dann ist es mir nur recht!
Bis danndann
PAF (patrickausfrankfurt) - nur echt mit dem TBGG
Hallo 'SelfHTML gemeinde'...
Ich suche eine möglichkeit in javascript einfach nur eine bestimmte anzahl milisekunden lang zu warten. Gibt
es vielleicht eine funktion wie Sleep(ms) oder Idle(ms)?Ich kenne setTimeout(), aber die ist für meine zwecke unbrauchbar, weil ich ja keine andere funktion aufrufen oder überhaupt irgend etwas machen möchte außer warten...
Kann mir jemand helfen?
Jou.
Danke...bis dann
/*,*/
Wowbagger
Hallo Wowbagger,
ich hab da so ein kleines ;-) Funktioenchen, was Dir helfen koennte.
<Funktioenchen>
<html>
<head>
<title>Test</title>
<script language="JavaScript">
function now()
{
var Act = new Date();
return Act;
}
function sleep()
{
var DelaySeconds = 5; /* 5 Sekunden Verzoegerung */
var DelayMinutes = 0; /* 0 Minuten Verzoegerung */
var DelayHours = 0; /* 0 Stunden Verzoegerung */
var DelayDays = 0; /* 0 Tage Verzoegerung */
var DelayMonths = 0; /* 0 Monate Verzoegerung */
var DelayYears = 0; /* 0 Jahre Verzoegerung */
var ActTime = new Date();
var Seconds = ActTime.getSeconds();
var Minutes = ActTime.getMinutes();
var Hours = ActTime.getHours();
var Days = ActTime.getDate();
var Months = ActTime.getMonth();
var Years = ActTime.getYear();
var FinalTime = ActTime;
if ((60 - Seconds) < DelaySeconds)
{
Seconds = Seconds + DelaySeconds - 60;
DelayMinutes = DelayMinutes + 1;
}
else
{
Seconds = Seconds + DelaySeconds;
}
if ((60 - Minutes) < DelayMinutes)
{
Minutes = Minutes + DelayMinutes - 60;
DelayHours = DelayHours + 1;
}
else
{
DelayMinutes = Minutes + DelayMinutes;
}
if ((24 - Hours) < DelayHours)
{
Hours = Hours + DelayHours - 24;
DelayDays = DelayDays + 1;
}
else
{
DelayHours = Hours + DelayHours;
}
switch (Months)
{
case 0, 2, 4, 6, 7, 9, 11:
if ((31 - Days) < DelayDays)
{
Days = Days + DelayDays - 31;
DelayMonths = DelayMonths + 1;
}
else
{
DelayDays = Days + DelayDays;
}
break;
case 3, 5, 8, 10:
if ((30 - Days) < DelayDays)
{
Days = Days + DelayDays - 30;
DelayMonths = DelayMonths + 1;
}
else
{
DelayDays = Days + DelayDays;
}
break;
case 1:
if ((Year % 400) == 0)
{
if ((29 - Days) < DelayDays)
{
Days = Days + DelayDays - 29;
DelayMonths = DelayMonths + 1;
}
else
{
DelayDays = Days + DelayDays;
}
}
else
{
if (((Year % 100) == 0) ((Year % 4) != 0))
{
if ((28 - Days) < DelayDays)
{
Days = Days + DelayDays - 28;
DelayMonths = DelayMonths + 1;
}
else
{
DelayDays = Days + DelayDays;
}
}
else
{
if ((29 - Days) < DelayDays)
{
Days = Days + DelayDays - 29;
DelayMonths = DelayMonths + 1;
}
else
{
DelayDays = Days + DelayDays;
}
}
}
break;
}
if ((11 - Months) < DelayMonths)
{
Months = Months + DelayMonths - 24;
DelayYears = DelayYears + 1;
}
else
{
DelayMonths = Months + DelayMonths;
}
Years = Years + DelayYears;
FinalTime.setSeconds(Seconds);
FinalTime.setMinutes(Minutes);
FinalTime.setHours(Hours);
FinalTime.setDate(Days);
FinalTime.setMonth(Months);
FinalTime.setYear(Years);
while (now() < FinalTime)
{
}
}
</script>
</head><body>
<script language="JavaScript">
var nun = new Date(now());
document.writeln(nun);
sleep();
var jetzt = new Date(now());
document.writeln(jetzt);
</script>
</body></html>
</Funktioenchen>
Wichtig dabei ist, Du musst die kleine Funktion now() auch mitkopieren. Im IE 4.00 klappt das Beispiel mit den Anzeigen, der Netsi 4.x gibt bei den Anzeigen leider "InvalidDate", die Funtionen klappen aber (getestet mittels "alert()").
Michael N.