<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: несколько SetTimer]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=15698&amp;type=atom" />
	<updated>2020-10-08T11:19:25Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=15698</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142542#p142542" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>stealzy пишет:</cite><blockquote><p>А зачем вы спрашиваете, если можете это проверить, запустив код?</p></blockquote></div><p> Как и в начале этой темы, код у меня работал, но не факт что правильно. Так, например с таймерами, мне изменили структуру на более &quot;правильную&quot;.</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-10-08T11:19:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142542#p142542</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142508#p142508" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-10-06T19:52:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142508#p142508</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142426#p142426" />
			<content type="html"><![CDATA[<p><strong>Alectric</strong> супер.</p><p>Спасибо всем за помощь.</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-10-02T21:35:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142426#p142426</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142408#p142408" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2020-10-01T16:46:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142408#p142408</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142407#p142407" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-10-01T15:58:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142407#p142407</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142406#p142406" />
			<content type="html"><![CDATA[<p><strong>stealzy</strong> Реально работает, еще не понимаю почему, но работает <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-10-01T15:40:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142406#p142406</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142405#p142405" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2020-10-01T14:58:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142405#p142405</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142404#p142404" />
			<content type="html"><![CDATA[<p>Замените на это, зависать не будет. <br />Видимо ограничение на кол-во прерванных потоков одной процедуры, знающие скажут точнее.<br />Циклы надо завершать до их повторного вызова.<br /></p><div class="codebox"><pre><code>
Loop() {
	Loop 1
	{
		ToolTip % A_Index
		Sleep 10
	}
	return
}
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2020-10-01T14:32:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142404#p142404</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142403#p142403" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-10-01T14:18:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142403#p142403</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142399#p142399" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2020-10-01T12:37:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142399#p142399</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142383#p142383" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-10-01T01:14:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142383#p142383</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142381#p142381" />
			<content type="html"><![CDATA[<p>Означает, но я говорил про логику всего сценария.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2020-10-01T01:03:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142381#p142381</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142379#p142379" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Не один раз, а каждые 120000мс.</p></blockquote></div><p> Разве эта строчка &quot;SetTimer, Loop, -1&quot; не означает перейти к метке Loop, один раз, мгновенно ?</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-10-01T00:09:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142379#p142379</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142377#p142377" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2020-10-01T00:00:18Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142377#p142377</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: несколько SetTimer]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=142374#p142374" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-09-30T23:15:31Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=142374#p142374</id>
		</entry>
</feed>
