<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; HTA, JS: Проблема SetTimeout]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6533&amp;type=atom" />
	<updated>2011-12-11T10:09:58Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=6533</id>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54471#p54471" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Ваш скрипт я запускал, но не понял его принципа. Я наблюдал декремент от 10000 до числа чуть меньше 20. Верно ли, что я наблюдал создание порядка 9980 таймеров? мсие 7 на висте.</p></blockquote></div><p>Скрипт увеличивает число на 1, а потом создает таймер чтобы через несколько секунд уменьшить таймер на 1, и так 10к раз. Судя по всему у вас баг повторился, так как счетчик не был обнулён.</p>]]></content>
			<author>
				<name><![CDATA[mikser]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24962</uri>
			</author>
			<updated>2011-12-11T10:09:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54471#p54471</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54470#p54470" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>mikser пишет:</cite><blockquote><p>Не ботнет, а безобидный авторегистратор мейл боксов на mail.ru&nbsp; (не для того о чем вы могли подумать, если интересно зачем пишите в аську)</p></blockquote></div><p>А зачем Вам столько почтовых ящиков? Ну, не приходят на ум иные целевые назначения.</p><div class="quotebox"><cite>mikser пишет:</cite><blockquote><p>Кстати коллеги,&nbsp; надеюсь вы не просто пофлудить сюда зашли smile , пожалуйста отпишитесь, удалось ли вам повторить этот баг IE8?</p></blockquote></div><p>Ну, Вы сами этому поспособствовали, дав пищу для измышлений, не отвечая на вопрос о назначении. А IE8 у меня уже нет.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-12-11T08:05:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54470#p54470</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54466#p54466" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>mikser пишет:</cite><blockquote><p>удалось ли вам повторить этот баг</p></blockquote></div><p>Ваш скрипт я запускал, но не понял его принципа. Я наблюдал декремент от 10000 до числа чуть меньше 20. Верно ли, что я наблюдал создание порядка 9980 таймеров? мсие 7 на висте.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2011-12-11T04:42:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54466#p54466</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54462#p54462" />
			<content type="html"><![CDATA[<p>Не ботнет, а безобидный авторегистратор мейл боксов на mail.ru&nbsp; (не для того о чем вы могли подумать, если интересно зачем пишите в <a href="http://tinyurl.com/39vbr7r">аську</a>)<br />Написал &quot;автомат&quot; который делает последовательно несколько асинхроных http запросов в результате чего регистрируется почтовый ящик. Запросы асинхроные и последовательные потому не обойтись без сет таймаутов или интервалов. Если запустить одновременно 50 автоматов то через какое то время в самый разгар работы скрипт просто останавливается без сообщений об ошибках. <br />Из за чего может останавливаться HTA на IE8 без сообщений об ошибках? Вот нашел сеттаймауты с ними проблема такая имеет место быть но 10000 многовато действительно, столько в моем скрипте врятли могло создаться одновременно, что еще может быть?</p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>scope</p></blockquote></div><p>Да, это было второе о чем я подумал и написал&nbsp; - <a href="http://javascript.ru/basic/closure#prostoe-opisanie">замыкания</a>.<br />Области видимости создаются и без сеттаймаутов. Можете создать 10к scop&#039;ов и убедится что дело не в них. Или вам не удалось повторить баг. У вас IE9?<br />Кстати коллеги,&nbsp; надеюсь вы не просто пофлудить сюда зашли <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> , пожалуйста отпишитесь, удалось ли вам повторить этот баг IE8?</p><br /><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><div class="quotebox"><cite>mikser пишет:</cite><blockquote><p>как преодолеть это ограничение?</p></blockquote></div><p>Скорее всего - никак.</p></blockquote></div><p>Оказалось что если нельзя но очень хочется то можно <img src="//forum.script-coding.com/img/smilies/big_smile.png" width="15" height="15" /> .<br />В случае с Сеттаймаутом можно все повесить на один сетинтервал. Да конечно со всеми вытекающими: нагрузка на процессор, больше кушается памяти и потеря точности, но ведь работает <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> !</p><p>Рабочий пример (ctrl+C, ctrl+V, сохранить в html, запустить в IE8 или ниже): <br /></p><div class="codebox"><pre><code>
&lt;BODY&gt;
&lt;div&gt; A &lt;span id=a&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; B &lt;span id=b&gt;0&lt;/span&gt;&lt;/div&gt;
&lt;button onclick=&quot;go(&#039;a&#039;)&quot;&gt;Инкрементить A а потом декрементить&lt;/button&gt;
&lt;button onclick=&quot;go(&#039;b&#039;)&quot;&gt;Инкрементить B а потом декрементить&lt;/button&gt;
&lt;button onclick=&quot;clearAll(tm)&quot;&gt;Отменить все активные декременты&lt;/button&gt;

&lt;SCRIPT LANGUAGE=&quot;JavaScript&quot;&gt;
function $$(a){return document.getElementById(a)}

function $setTimeout(callback,delay)
{
	if (!$setTimeout.Init)
	{
		$setTimeout.Init=true;
		$setTimeout.INT=setInterval($TimersFire,11);
		$setTimeout.TIMERS={};
		$setTimeout.IDCOUNT=1;

	}

	var ID=$setTimeout.IDCOUNT++;
	$setTimeout.TIMERS[ID]={time:(new Date()).valueOf()+delay, func:callback}
	return ID;
}
////////////////////////////

function $clearTimeout(ID)
{
	if ($setTimeout.TIMERS[ID])
		delete $setTimeout.TIMERS[ID];
}

////////////////////////////
function $TimersFire()//вызывается раз в 11 мсек
{
	var nov=(new Date()).valueOf();
	var TS=$setTimeout.TIMERS;
	for(var i in TS)
	{
		if (TS[i].time &lt;= nov)
		{
			TS[i].func();
			delete TS[i]
		}
		else //оптимизация :) 
			break;
	}//for


	//============================================

}
////////////////////////////
function clearAll(mas)
{
	while (mas.length&gt;0)
	{
		$clearTimeout(mas.pop())
	}
}
	
	var tm=[];
	function foo(obj,bar)
	{
		obj.innerHTML=parseInt(obj.innerHTML)+1;
		var ID=obj.getAttribute(&quot;id&quot;);
		var handler=new Function(&quot;&quot;,&quot;var SPAN=$$(&#039;&quot;+ID+&quot;&#039;);SPAN.innerHTML=parseInt(SPAN.innerHTML)-1;&quot;)
		var et=$setTimeout(handler,3000);
		tm.push(et)
	}

	function go(let)
	{
		var i=0;
		var len=10000;//4925;//9850
		for (;i&lt;len ;++i )
		{
			foo($$(let),i)
		}
		//w(&quot;now = &quot; + Dumper(new Date()))
		//w(Dumper(timers))
	}

  &lt;/SCRIPT&gt;
 &lt;/BODY&gt;</code></pre></div><p>Осталось только придумать&nbsp; $setInterval.</p>]]></content>
			<author>
				<name><![CDATA[mikser]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24962</uri>
			</author>
			<updated>2011-12-10T20:53:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54462#p54462</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54447#p54447" />
			<content type="html"><![CDATA[<p>Коллега <strong>mikser</strong>, небось, ботнет пишет, потому шифруется <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-12-10T17:22:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54447#p54447</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54443#p54443" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>достаточно скопировать весь пример из этого сообщения и сохранить как html-страницу.</p></blockquote></div><p>Что я и сделал.<br />Спасибо, посмотрю.</p><br /><p>А товарищЪ <strong>mikser</strong> так и не откликнулся на многочисленные просьбы &quot;трудящихся&quot;....</p>]]></content>
			<author>
				<name><![CDATA[Любитель]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27037</uri>
			</author>
			<updated>2011-12-10T16:49:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54443#p54443</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54415#p54415" />
			<content type="html"><![CDATA[<p><strong>Любитель</strong>, для полноты иллюстрации я объединил все сказанное в один скрипт. Каждый вызов установки таймера подробно описан в предшествующих комментариях. Вы можете сами его запустить и проверить - достаточно скопировать весь пример из этого сообщения и сохранить как html-страницу. <br /></p><div class="codebox"><pre><code>&lt;script&gt;

var x = 1;

(function()
{
	var x = 1000;

/*
Для этого таймаута контекст создания и контекст вызова совпадают. 
Поэтому через одну секунду после открытия страницы в браузере 
первое диалоговое окно покажет следующий текст
1, true
*/
	setTimeout(&#039;alert([x, this == window])&#039;, 1000);

/*
Для этого таймаута контекст создания и контекст вызова не совпадают. 
Контекст создания функции локальный - функция видит локальную переменную. 
Поэтому через десять секунд после открытия страницы в браузере 
второе диалоговое окно покажет следующий текст
1000, true
*/
	setTimeout(function() { alert([x, this == window]); }, 10000);

})();

&lt;/script&gt;</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2011-12-10T05:45:57Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54415#p54415</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54414#p54414" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Просто сравните результаты двух таймаутов (строка - через 1 сек, функция - через 10 сек)</p></blockquote></div><p>А нельзя ли для не профессионалов на пальцах показать, что сравнивать, как сравнивать, что за результаты?</p>]]></content>
			<author>
				<name><![CDATA[Любитель]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27037</uri>
			</author>
			<updated>2011-12-10T03:05:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54414#p54414</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54412#p54412" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>mikser пишет:</cite><blockquote><p>Все сет таймаутные и сет интервальные функции выполняются в контексте глобального обекта window. То есть this == window (внутри функции которая вызывается по сетТаймауту).</p></blockquote></div><p>Обратите внимание как я сказал:<br /></p><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>каждый таймаут создается в отдельном контексте</p></blockquote></div><p>Я не мог вспомнить другой перевод (точнее, определение) слова scope, активно используемого в JavaScript. Вот оно - область видимости (спасибо коллеге <strong>Любитель</strong> за ссылку - я о ней знаю, но в данный момент успешно забыл). Так вот, для каждой функции создается своя область видимости. Посему Ваше следующее высказывание в некоторой степени не соответствует сказанному мной. <br /></p><div class="quotebox"><cite>mikser пишет:</cite><blockquote><p>Все сет таймаутные и сет интервальные функции выполняются в контексте глобального обекта window</p></blockquote></div><p>То есть существуют область видимости (контекст создания - я имел в виду это) и область исполнения (то, что имели в виду Вы). Просто сравните результаты двух таймаутов (строка - через 1 сек, функция - через 10 сек)<br /></p><div class="codebox"><pre><code>&lt;script&gt;

var x = 1;

(function()
{
    var x = 1000;
    setTimeout(&#039;alert(x)&#039;, 1000);
    setTimeout(function() { alert(x); }, 10000);

})();

&lt;/script&gt;</code></pre></div><p>Но! Если вместо <strong>alert(x)</strong> Вы укажете <strong>alert(this === window)</strong>, то в обоих случаях получите результат - <strong>true</strong>. И это верно - потому что контекст вызова - глобальный. Это то, опять же, о чем говорили Вы.</p>]]></content>
			<author>
				<name><![CDATA[Rumata]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24846</uri>
			</author>
			<updated>2011-12-09T17:54:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54412#p54412</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54410#p54410" />
			<content type="html"><![CDATA[<p><a href="http://alljs.ru/articles/timeout/">Может это чем поможет</a><br />Можно к хозяину сайта обратиться.</p><p>А вообще то осёл вешается на больших циклах, что взять с убогого.<br />А может осёл просто в какой то момент перестаёт успевать отслеживать все таймеры?</p><p>Мне тоже любопытно, зачем столько таймеров одновременно.</p>]]></content>
			<author>
				<name><![CDATA[Любитель]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27037</uri>
			</author>
			<updated>2011-12-09T17:10:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54410#p54410</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54405#p54405" />
			<content type="html"><![CDATA[<p>Ну, до кучи, и я присоединю свой голос к высказанной просьбе.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-12-09T13:26:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54405#p54405</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54402#p54402" />
			<content type="html"><![CDATA[<p><strong>mikser</strong>, в очередной раз словами, уважаемого <strong>Rumata</strong> напоминаю:</p><div class="quotebox"><blockquote><p>Поделитесь, пожалуйста, что это у вас за задача такая, что Вам требуется одновременно 10к таймаутов? <br />....<br />Мне кажется Вам следует пересмотреть архитектуру приложения.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-12-09T12:26:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54402#p54402</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54401#p54401" />
			<content type="html"><![CDATA[<p>У хамелеона в IE9 все пашет. У меня не пашет в IE8. Отказываться от поддержки IE8 нет желания, так как он поставляется вместе с win7 по умолчанию. А обновлять браузер который как браузер не использую я не хочу из принципа.</p>]]></content>
			<author>
				<name><![CDATA[mikser]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24962</uri>
			</author>
			<updated>2011-12-09T12:18:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54401#p54401</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54400#p54400" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>mikser пишет:</cite><blockquote><p><img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Достаточно сохранить мой код в html файл и запустить.</p></blockquote></div><p>Не люблю я Javascript и длинный код. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><div class="codebox"><pre><code>
&lt;html&gt;
    &lt;head&gt;
        &lt;meta charset=&quot;Windows-1251&quot;&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div id=&quot;txtfld&quot;&gt;0&lt;/div&gt;
        &lt;button onclick=&quot;btn1_onclick()&quot;&gt;Вызвать Test1()&lt;/button&gt;
        &lt;button onclick=&quot;btn2_onclick()&quot;&gt;Вызвать Test2()&lt;/button&gt;
    &lt;/body&gt;

    &lt;script language=vbscript&gt;
    Option Explicit
    Dim n
    Sub btn1_onclick()
        Dim i
        For i=1 to 10000
            SetTimeout GetRef(&quot;Test1&quot;), i
        Next
    End Sub

    Sub btn2_onclick()
        Dim i
        For i=1 to 10000
            SetTimeout GetRef(&quot;Test2&quot;), i
        Next
    End Sub
    
    Sub Test1()
        n = n + 1
        txtfld.innerText = n
    End Sub

    Sub Test2()
        n = n - 1
        txtfld.innerText = n
    End Sub
    
    &lt;/script&gt;

&lt;/html&gt;</code></pre></div><p>Проверил на 10000 таймеров в IE. Всё пашет.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2011-12-09T11:34:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54400#p54400</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: HTA, JS: Проблема SetTimeout]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=54398#p54398" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>А пункты в настройках IE, в разделе &quot;Дополнительно&quot; Вы выставляли ?<br />а) Отключить отладку сценариев (Internet Explorer)<br />б) Отключить отладку сценариев другие<br />в) Показывать уведомление о каждой ошибке сценария</p></blockquote></div><p>Выставил. Всеравно сообщений об ошибке не замечено.<br /></p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Попробую сегодня сэмулировать ситуацию.</p></blockquote></div><p><img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Достаточно сохранить мой код в html файл и запустить.</p>]]></content>
			<author>
				<name><![CDATA[mikser]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24962</uri>
			</author>
			<updated>2011-12-09T10:03:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=54398#p54398</id>
		</entry>
</feed>
