Можно использовать классы .NET в качестве COM-объектов в Delphi:
Теперь, можно получить доступ к классам от блока .NET, которые экспортируются в библиотеке типов.
Прямого такого не существует. Вам нужно будет указать javascript разбудить «что-то» через некоторое время, используя setTimeout
.
Это «что-то» будет кодом, который вы планируете выполнить после сна, конечно.
Из примера, который я нашел в Интернете :
function dothingswithsleep( part ) {
if( part == 0 ) {
alert( "before sleep" );
setTimeout( function() { dothingswithsleep( 1 ); }, 1000 );
} else if( part == 1 ) {
alert( "after sleep" );
}
}
Но это хрупкая конструкция. Вам лучше переосмыслить свою бизнес-логику, чтобы действительно сделать что-то через секунду: вызвать другую функцию вместо использования этих надуманных вспомогательных переменных.
Первый вопрос , почему ты хочешь спать в петле? Если это необходимо, возможно, следует создать систему событий. Я сам много раз пробовал тактику сна для многопоточного программирования javascript и обнаружил, что она не работает. Лучший способ сделать многопоточность в javascript - использовать систему событий, такую как предоставляемая YUI или почти любой другой структурой. Попросите вашего слушателя подписаться на это событие и делать что-нибудь всякий раз, когда оно происходит. В этих фреймворках событий у вас есть полный контроль над тем, когда срабатывает ваше собственное событие, поэтому в них нет ничего страшного.
Вот ссылка на фреймворк событий YUI.
http://developer.yahoo.com/yui/examples /event/index.html
Вот как это можно было бы закодировать с использованием YUI
var myEvent = new YAHOO.util.CustomEvent('fooEvent');
// subscribe a function to be called (first param) inside the scope of an object
// (second param).
myEvent.subscribe(function() {alert(this.count++);},{count:0},true);
setTimeout('myEvent.fire()',1000);
. Этот способ сделать это намного чище и компактнее. Или, если вы не хотите использовать структуру событий, попробуйте этот
var myObj = {
count:0,
doSomething:function(){alert(this.count++);}
loopFunc:function(){
this.doSomething();
setTimeout('myObj.loopFunc()',1000);
}
}
, который предлагает то, что вам нужно, и более компактный.
Но если вам ДЕЙСТВИТЕЛЬНО нужна функция сна в вашем коде, я бы рекомендовал сделать синхронный вызов ajax простого серверного скрипта. Затем вы можете использовать код на сервере, чтобы спать, если хотите. Ниже приведена ссылка на размещенный здесь вопрос, в котором показано, как сделать синхронный вызов.
Как заставить jQuery выполнять синхронный, а не асинхронный, Запрос Ajax?
Но я настоятельно рекомендую использовать метод setTimeout. Гораздо чище, и вы, вероятно, не захотите делать какие-либо вызовы на стороне сервера, если можете этого избежать.
Я искал / гуглил довольно много веб-страниц по javascript sleep / wait ... и нет ответа, если вы хотите, чтобы javascript был "RUN, DELAY, RUN" ... что большинство людей получил было либо "RUN, RUN (бесполезная штука), RUN", либо "RUN, RUN + RUN с задержкой" ....
Так что я съел гамбургеры и задумался ::: вот решение, которое работает ... но вы должны разбить свои рабочие коды ... :::
// ..................... .................... // example1:
<html>
<body>
<div id="id1">DISPLAY</div>
<script>
//javascript sleep by "therealdealsince1982"; copyrighted 2009
//setInterval
var i = 0;
function run() {
//pieces of codes to run
if (i==0){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i==1){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i==2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i >2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" is ran</p>"; }
if (i==5){document.getElementById("id1").innerHTML= "<p>all code segment finished running</p>"; clearInterval(t); } //end interval, stops run
i++; //segment of code finished running, next...
}
t=setInterval("run()",1000);
</script>
</body>
</html>
// .................................... // example2:
<html>
<body>
<div id="id1">DISPLAY</div>
<script>
//javascript sleep by "therealdealsince1982"; copyrighted 2009
//setTimeout
var i = 0;
function run() {
//pieces of codes to run, can use switch statement
if (i==0){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(1000);}
if (i==1){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(2000);}
if (i==2){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>"; sleep(3000);}
if (i==3){document.getElementById("id1").innerHTML= "<p>code segment "+ i +" ran</p>";} //stops automatically
i++;
}
function sleep(dur) {t=setTimeout("run()",dur);} //starts flow control again after dur
run(); //starts flow
</script>
</body>
</html>
function sleep(delay) {
var start = new Date().getTime();
while (new Date().getTime() < start + delay);
}