Я хотел бы использовать Perl и / или Python для реализации следующего псевдокода JavaScript:
var c=0;
function timedCount()
{
c=c+1;
print("c=" + c);
if (c<10) {
var t;
t=window.setTimeout("timedCount()",100);
}
}
// main:
timedCount();
print("after timedCount()");
var i=0;
for (i=0; i<5; i++) {
print("i=" + i);
wait(500); //wait 500 ms
}
Теперь, это особенно неудачный пример для выбора в качестве основы - но я просто не мог придумать какой-либо другой язык для его предоставления :) По сути, есть «основной цикл» и вспомогательный «цикл» ( timedCount
), которые учитываются с разной скоростью: основное с периодом 500 мс (реализовано через wait
), timedCount
с периодом 100 мс (реализовано через setInterval
). Тем не менее, JavaScript по сути однопоточный, а не многопоточный - и поэтому нет реального sleep
/ wait
/ pause
или подобного ( см. Функция ожидания JavaScript - ozzu.com ), поэтому вышесказанное является, ну, псевдокодом;)
Переместив основную часть на еще одну функцию setInterval
, мы можем получить версию кода, которую можно вставить и запустить в оболочке браузера, например JavaScript Shell 1.4 ( но не в терминальной оболочке, такой как EnvJS / Rhino ):
var c=0;
var i=0;
function timedCount()
{
c=c+1;
print("c=" + c);
if (c<10) {
var t;
t=window.setTimeout("timedCount()",100);
}
}
function mainCount() // 'main' loop
{
i=i+1;
print("i=" + i);
if (i<5) {
var t;
t=window.setTimeout("mainCount()",500);
}
}
// main:
mainCount();
timedCount();
print("after timedCount()");
... что приводит к чему-то вроде этого:
i=1
c=1
after timedCount()
c=2
c=3
c=4
c=5
c=6
i=2
c=7
c=8
c=9
c=10
i=3
i=4
i=5
... то есть основные и вспомогательные значения чередуются / чередуются / перемежаются с основным числом приблизительно каждые пять вспомогательных значений, как и предполагалось.
А теперь главный вопрос - каков рекомендуемый способ сделать это в Perl и Python соответственно?
- Кроме того, предлагают ли Python или Perl средства для реализации вышеупомянутого с микросекундным временным разрешением в кроссплатформенном режиме?
Большое спасибо за любые ответы,
Ура!