<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: несколько SetTimer]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=15698</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15698&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: несколько SetTimer».]]></description>
		<lastBuildDate>Thu, 08 Oct 2020 11:19:25 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142542#p142542</link>
			<description><![CDATA[<div class="quotebox"><cite>stealzy пишет:</cite><blockquote><p>А зачем вы спрашиваете, если можете это проверить, запустив код?</p></blockquote></div><p> Как и в начале этой темы, код у меня работал, но не факт что правильно. Так, например с таймерами, мне изменили структуру на более &quot;правильную&quot;.</p>]]></description>
			<author><![CDATA[null@example.com (Botsy)]]></author>
			<pubDate>Thu, 08 Oct 2020 11:19:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142542#p142542</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142508#p142508</link>
			<description><![CDATA[<p>А подскажите, как использовать команду Thread, NoTimers ? Задача выполнять одну функцию, что бы таймеры ее не прерывали. Или они на паузу становились во время выполнения этой функции или как-то еще, главное не прерывать выполнение функции.<br />В данном примере, добавил эту команду перед функцией и эту же команду после функции с параметром &quot;false&quot;. Это правильно?<br /></p><div class="codebox"><pre><code>
F10::
SetTimer, Rabbit, 12000
SetTimer, Lion, 6000
SetTimer, Bear, 3000

Loop
{
...
}

Rabbit:
  Send 1
return

Lion:
  Send 2
return

Bear:
Thread, NoTimers
func()
Thread, NoTimers, False
return
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Botsy)]]></author>
			<pubDate>Tue, 06 Oct 2020 19:52:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142508#p142508</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142426#p142426</link>
			<description><![CDATA[<p><strong>Alectric</strong> супер.</p><p>Спасибо всем за помощь.</p>]]></description>
			<author><![CDATA[null@example.com (Botsy)]]></author>
			<pubDate>Fri, 02 Oct 2020 21:35:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142426#p142426</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142408#p142408</link>
			<description><![CDATA[<div class="codebox"><pre><code>
F10::
SetTimer, Rabbit, 12000
SetTimer, Lion, 6000
SetTimer, Bear, 3000

Loop
{
  tooltip,% a_index &quot;`n&quot; text,,0
  sleep,1000
}

Rabbit:
  text.=&quot;Кроль`n&quot;
return

Lion:
  text.=&quot;Лев`n&quot;
return

Bear:
  text.=&quot;Мишка`n&quot;
return


esc::exitapp
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Thu, 01 Oct 2020 16:46:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142408#p142408</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142407#p142407</link>
			<description><![CDATA[<p><strong>stealzy</strong> а если у каждого таймера есть свои действия в подпрограмме ? Например не только вывести лог, но и что-то еще, пусть будет Send. </p><p>Типо у &quot;Кроль&quot; будет Send 1, у &quot;Лев&quot; Send 2, и т.д.<br /></p><div class="codebox"><pre><code>
Кроль:
send 1
sleep, 1000

Лев:
send 2
sleep, 1000

Мишка:
send 3
sleep, 1000

	timer := A_ThisLabel
	log .= timer &quot; &quot; ; console.log(timer)
Return</code></pre></div><p>В таком случае, мы вернемся к тому, с чего начинали: <br />- При выполнении Rabbit, выполняются он, два других таймера и потом Loop.<br />- При выполнении Lion, выполняется он, Bear и потом Loop.<br />- При выполнении Bear, выполняется он и потом Loop.</p>]]></description>
			<author><![CDATA[null@example.com (Botsy)]]></author>
			<pubDate>Thu, 01 Oct 2020 15:58:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142407#p142407</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142406#p142406</link>
			<description><![CDATA[<p><strong>stealzy</strong> Реально работает, еще не понимаю почему, но работает <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (Botsy)]]></author>
			<pubDate>Thu, 01 Oct 2020 15:40:01 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142406#p142406</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142405#p142405</link>
			<description><![CDATA[<p>Ситуация проясняется, после срабатывания таймера выполнение цикла должно прерваться и перейти в начало цикла.<br /></p><div class="quotebox"><cite>Botsy пишет:</cite><blockquote><p>Вроде таймер и завершает цикл по его истечению ? Ведь когда выполняется цикл и истекает время, запускается таймер и начинается цикл по новой, а не продолжается в том же месте, на котором он прервался.</p></blockquote></div><p>Нет, таймер после <strong>завершения </strong>своей подпрограммы передает исполнение назад в место, где он прервал поток выполнения.</p><p>А цикл нужно прерывать. Это можно сделать либо изнутри цикла, проверяя в нем условие выхода, либо снаружи, прерывая сам процесс AutoHotkey.exe.<br />Поскольку нужно сохранять состояния таймеров, в вашем случае сподручнее будет изнутри:</p><div class="codebox"><pre><code>i := 0
F10::
	SetTimer Кроль, 12000
	SetTimer Лев, 6000
	SetTimer Мишка, 3000

	Loop {
		Sleep 1000
		If timer {
			timer := &quot;&quot;
			Continue
		}
		++i
		Tooltip % log &quot;`n&quot; i
	}
Return

Кроль:
Лев:
Мишка:
	timer := A_ThisLabel
	log .= timer &quot; &quot; ; console.log(timer)
Return
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (stealzy)]]></author>
			<pubDate>Thu, 01 Oct 2020 14:58:27 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142405#p142405</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142404#p142404</link>
			<description><![CDATA[<p>Замените на это, зависать не будет. <br />Видимо ограничение на кол-во прерванных потоков одной процедуры, знающие скажут точнее.<br />Циклы надо завершать до их повторного вызова.<br /></p><div class="codebox"><pre><code>
Loop() {
	Loop 1
	{
		ToolTip % A_Index
		Sleep 10
	}
	return
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 01 Oct 2020 14:32:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142404#p142404</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142403#p142403</link>
			<description><![CDATA[<p><strong>serzh82saratov</strong> </p><div class="codebox"><pre><code>f := Func(&quot;Loop&quot;).Bind(A_TickCount)</code></pre></div><p> а зачем передавать в функцию цикла, переменную A_TickCount ? <br />сейчас выдает такой результат : <a href="https://imgbb.com/"><span class="postimg"><img src="https://i.ibb.co/4FMST0c/Timer.jpg" alt="https://i.ibb.co/4FMST0c/Timer.jpg" /></span></a></p><p>Мишка просто зацикливается и больше другие таймеры не работают. Меняя Sleep в цикле, меняется и зависающий log(txt)</p>]]></description>
			<author><![CDATA[null@example.com (Botsy)]]></author>
			<pubDate>Thu, 01 Oct 2020 14:18:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142403#p142403</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142399#p142399</link>
			<description><![CDATA[<p>Да, я ошибся в теории, даже так происходит не более 10 прерываний цикла.<br />Значит перед запуском того же цикла, надо его предварительно завершать.<br /></p><div class="codebox"><pre><code>
SetTimer, Rabbit, 1000
SetTimer, Lion, 2000
SetTimer, Bear, 4000
return

Rabbit:
	log(&quot;Кроль&quot;)
	f := Func(&quot;Loop&quot;).Bind(A_TickCount)
	SetTimer, % f, -10 
	return
	
Lion:
	log(&quot;Лев&quot;)
	f := Func(&quot;Loop&quot;).Bind(A_TickCount)
	SetTimer, % f, -10 
	return

Bear:
	log(&quot;Мишка&quot;)
	f := Func(&quot;Loop&quot;).Bind(A_TickCount)
	SetTimer, % f, -10 
	return

Loop() {
	Loop
	{
		ToolTip % A_Index
		Sleep 10
	}
	return
}

log(txt) {
	Static list 
	list .= txt &quot;`n&quot; 
	ToolTip % list, 2, 2, 2
}
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 01 Oct 2020 12:37:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142399#p142399</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142383#p142383</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Означает, но я говорил про логику всего сценария.</p></blockquote></div><p> Так и понял, прост уточнил. Проверил предложенный вами способ, остались те же проблемы, как и при помощи 2-ого поста в этой теме от &quot;qqlexa&quot;. <br />&quot;- скрипт так же пропускает срабатывание таймеров, в нужные сроки. Каждые два &quot;льва&quot;, должен срабатывать один &quot;кроль&quot;. Так как там по времени 1 минута и 2 минуты. Но когда срабатывает &quot;кроль&quot;, он просто пропускает &quot;льва&quot; и идет к циклу, хотя время же пришло и для &quot;льва&quot;.<br />- при запуске, должны же сработать все таймеры и пойти отсчет. А сейчас срабатывает только первый, в принципе это аналогично первому пункту.&quot;</p><p>Возможно это из-за отсутствия мультипоточности в AHK.</p>]]></description>
			<author><![CDATA[null@example.com (Botsy)]]></author>
			<pubDate>Thu, 01 Oct 2020 01:14:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142383#p142383</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142381#p142381</link>
			<description><![CDATA[<p>Означает, но я говорил про логику всего сценария.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 01 Oct 2020 01:03:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142381#p142381</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142379#p142379</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Не один раз, а каждые 120000мс.</p></blockquote></div><p> Разве эта строчка &quot;SetTimer, Loop, -1&quot; не означает перейти к метке Loop, один раз, мгновенно ?</p>]]></description>
			<author><![CDATA[null@example.com (Botsy)]]></author>
			<pubDate>Thu, 01 Oct 2020 00:09:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142379#p142379</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142377#p142377</link>
			<description><![CDATA[<div class="quotebox"><cite>Botsy пишет:</cite><blockquote><p>Он запускает таймер Loop, один раз, мгновенно.</p></blockquote></div><p>Не один раз, а каждые 120000мс.<br /></p><div class="quotebox"><cite>Botsy пишет:</cite><blockquote><p>- т.к. цикл бесконечный, то команды &quot;return&quot; в таймерах Rabbit, Lion, Bear никогда не наступят.</p></blockquote></div><p>Нет, наступают сразу.<br />Если цикл бесконечный, зачем вы его несколько раз запускаете. <br />Каждый таймер, будет прерывать выполняемый цикл, и запускать его в новом потоке, это будет есть память.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 01 Oct 2020 00:00:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142377#p142377</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=142374#p142374</link>
			<description><![CDATA[<p><strong>stealzy</strong> Выкладывать цикл на 2000+ строк - не думаю что кто-то вообще будет разбираться в тех дебрях, что там написаны. Важно что цикл бесконечный, не так ли ? Я выкинул все лишнее на мой взгляд, и оставил скелет в приведенном выше примере. <br /></p><div class="quotebox"><blockquote><p>А прежний цикл кто будет завершать? Ведь программа таймера не может завершиться после входа в цикл, а значит следующее выполнение откладывается.</p></blockquote></div><p>Вроде таймер и завершает цикл по его истечению ? Ведь когда выполняется цикл и истекает время, запускается таймер и начинается цикл по новой, а не продолжается в том же месте, на котором он прервался.</p><p><strong>serzh82saratov</strong> у вас получается:<br />- таймер Rabbit, запускается каждые 120000мс. Он запускает таймер Loop, один раз, мгновенно. <br />- аналогично для таймеров Lion и Bear, 60000 и 30000 соответственно. <br />- т.к. цикл бесконечный, то команды &quot;return&quot; в таймерах Rabbit, Lion, Bear никогда не наступят. <br />- цикл будет выполняться до ближайшего таймера.</p><p>Правильно понял написанное ?</p>]]></description>
			<author><![CDATA[null@example.com (Botsy)]]></author>
			<pubDate>Wed, 30 Sep 2020 23:15:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=142374#p142374</guid>
		</item>
	</channel>
</rss>
