<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: При повторном нажатии кнопки прервать задержку]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=7045&amp;type=atom" />
	<updated>2012-04-08T11:45:47Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=7045</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59022#p59022" />
			<content type="html"><![CDATA[<p>Спасибо!<br />Буду пересматривать алгоритм, либо вообще плюну на это.<br />Лучшее - враг хорошего.<br />Но для очистки совести задам подобный вопрос на офф.форуме.<br />Если что предложат интересного, то тут отпишусь.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2012-04-08T11:45:47Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59022#p59022</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59018#p59018" />
			<content type="html"><![CDATA[<p>Вероятно имеется в виду не «потоков», а «потоков на хоткей».<br /></p><div class="quotebox"><blockquote><p>Получается, что всё-таки псевдо-мультипоточность не победить?</p></blockquote></div><p>Псевдо-мультипоточность побеждать не нужно, она войны не объявляла и вела себя смирно, как задумано.<br /></p><div class="quotebox"><blockquote><p>А нету какого-нибудь другого костыля?</p></blockquote></div><p>Позвольте еще раз вам посоветовать не костыль искать, а алгоритм пересмотреть.<br />Делать всё одним нажатием конечно же «очень дружелюбно к пользователю», но даже на компьютерной мыше более одной кнопки.</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-04-08T10:17:20Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59018#p59018</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59016#p59016" />
			<content type="html"><![CDATA[<p>Не помогает.<br />Как только выставляешь максимальное количество потоков = 1, то всё нормализовывается.<br />Получается, что всё-таки псевдо-мультипоточность не победить?</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2012-04-08T08:04:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59016#p59016</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59015#p59015" />
			<content type="html"><![CDATA[<p>Попробуйте изменить:<br /></p><div class="codebox"><pre><code>#MaxThreadsPerHotkey 2
PgDn::
    KeyWait pgdn
    ; …</code></pre></div>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-04-08T04:39:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59015#p59015</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59013#p59013" />
			<content type="html"><![CDATA[<p>А нету какого-нибудь другого костыля?<br />А то я заблокировал повторное нажатие PgDn аж до последнего слипа.<br />А он всё-равно, если зажать&nbsp; PgDn глючит.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2012-04-08T03:29:18Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59013#p59013</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59010#p59010" />
			<content type="html"><![CDATA[<p>Попробуйте изменить:<br /></p><div class="codebox"><pre><code>PgDn::
    If (thisSubExec = 1) {
        breakThread := 1
        Sleep 300 ; задержка должна соответствовать наибольшей паузе между проверками breakThread  в выполняющемся потоке
        GoSub Action2
    }</code></pre></div><p>и<br /></p><div class="codebox"><pre><code>while(!breakThread &amp;&amp; a_index&lt;n)
    ControlClick, % &quot;x&quot; x%a_index% &quot; y&quot; y%a_index%, ahk_class Premiere Pro

If (breakThread = 1)
{
    breakThread := 0
    Exit
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-04-08T01:14:32Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59010#p59010</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59009#p59009" />
			<content type="html"><![CDATA[<p>Апдейт, не спасло, просто когда я прерываю поток в момент control click происходит это недоразумение.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2012-04-08T01:02:22Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59009#p59009</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59008#p59008" />
			<content type="html"><![CDATA[<p>Вероятно, потому, что&nbsp; n*delay &gt; (100 мс установленных как время ожидания завершения потока при повторных вызовах)</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-04-08T01:00:53Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59008#p59008</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59007#p59007" />
			<content type="html"><![CDATA[<p>creature.ws, Вы не поверите.<br />Исправило проблему вот эта строчка.<br />SetControlDelay -1<br />Не понимаю только почему?<br />Чем же этот Delay мешал и что во время него происходило?</p><p>Апдейт, не спасло, просто когда я прерываю поток в момент control click происходит это недоразумение.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2012-04-08T00:46:39Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59007#p59007</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59006#p59006" />
			<content type="html"><![CDATA[<p>Поставьте перед|после каждого действия (клика, нажатия, поиска) вызов listvars — возможно поможет понять какой поток что отправляет и в какой момент.</p><p>«Оставшихся 4-х кликов» ведь не существует, n заполняется в action1 и более не изменяется до следующего вызова action1.</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-04-08T00:30:05Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59006#p59006</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=59005#p59005" />
			<content type="html"><![CDATA[<p>Ну ErrorLevel не при чём.<br />Так как он фигурирует только вначале скрипта.<br />Проблема где-то здесь.<br /></p><div class="codebox"><pre><code>while(a_index&lt;n)
   {
      ControlClick, % &quot;x&quot; x%a_index% &quot; y&quot; y%a_index%, ahk_class Premiere Pro
      If (breakThread = 1)
      {
         breakThread := 0
         Exit
      }
 
   }</code></pre></div><p>Потому как, когда он посылает 10 кликов и я его прерываю на 6-ом, то в следующий раз он посылает только оставшиеся 4.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2012-04-08T00:07:04Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=59005#p59005</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=58992#p58992" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Оказывается, если закончить Thread, то сохранённые и задействованные в нём переменные тоже пропадают.</p></blockquote></div><p>Не пропадают. Единственный момент —<br /></p><div class="quotebox"><blockquote><p>Each thread retains its own value of ErrorLevel, meaning that if the current thread is interrupted by another, when the original thread is resumed it will still have its original value of ErrorLevel, not the ErrorLevel that may have been set by the interrupting thread.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-04-07T22:39:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=58992#p58992</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=58979#p58979" />
			<content type="html"><![CDATA[<p>По-другому никак не могу придумать.<br />Смотрите. <br /><span class="postimg"><img src="http://www.efxi.ru/file/premiere_cs55_timeline.files/image005.gif" alt="http://www.efxi.ru/file/premiere_cs55_timeline.files/image005.gif" /></span><br />Скрипт рассчитан для того, чтобы запомнить текущее выделение треков - на данной картинке - Video1<br /><em>У меня ищется картинка выделенной буквы d и те координаты, где находит, сохраняются в переменные.</em><br /></p><div class="codebox"><pre><code>ErrorLevel := 0
n := 1
t := 590
while((!ErrorLevel)&amp;&amp;(n&lt;=10))
{
   ImageSearch, x%n%, y%n%, 410, t, 600, 1050, D:\Abola\video1.png
   t := y%n% + 10
   n++
}</code></pre></div><p>Потом выделить все треки, послать Pgdn, снять выделение со всех треков.<br /></p><div class="codebox"><pre><code>Send, ^!1^!2{PgDn}!0!9   ;     Toggle video all on Toggle audio all on PgDn Toggle video all off Toggle audio all off
sleep, 100</code></pre></div><p>И выделить треки которые были выделенными изначально.<br /><em>Посылается клик на запомненные переменные</em><br /></p><div class="codebox"><pre><code>while(a_index&lt;n)
{
   ControlClick, % &quot;x&quot; x%a_index% &quot; y&quot; y%a_index%, ahk_class Premiere Pro
}
sleep, 100
return</code></pre></div><p>Ваше решение я адаптировал так.<br /><em>Так-как запомнить текущее выделение треков нужно только при первом нажатии PgDn и прерывать этот процесс ненужно, то </em><br /></p><div class="codebox"><pre><code>#MaxThreadsPerHotkey 2
PgDn::
    If (thisSubExec = 1) {
        breakThread := 1
        Sleep 100 ; задержка должна соответствовать наибольшей паузе между проверками breakThread  в выполняющемся потоке
        GoSub Action2
    }
    Else {
        thisSubExec := 1
        GoSub Action1
    }
    return

Action1:
   ErrorLevel := 0
   n := 1
   t := 590
   while((!ErrorLevel)&amp;&amp;(n&lt;=10))
   {
      ImageSearch, x%n%, y%n%, 410, t, 600, 1050, D:\Abola\video1.png
      t := y%n% + 10
      n++
   }

Action2:
   Send, ^!1^!2{PgDn}!0!9   ;     Toggle video all on Toggle audio all on PgDn Toggle video all off Toggle audio all off
   If (breakThread = 1)
   {
       breakThread := 0
       Exit
   }
   sleep, 100
   while(a_index&lt;n)
   {
      ControlClick, % &quot;x&quot; x%a_index% &quot; y&quot; y%a_index%, ahk_class Premiere Pro
      If (breakThread = 1)
      {
         breakThread := 0
         Exit
      }

   }
Konec: ; метка к которой нет необходимости обращаться — символизирует «конец подпрограммы»
   thisSubExec := 0
   sleep, 100
   return</code></pre></div><p>Но появилась проблема.<br />Оказывается, если закончить Thread, то сохранённые и задействованные в нём переменные тоже пропадают.<br />Как это-то побороть?<br />Может создать 3ий Thread который будет запускаться, только при первом нажатии PgDn и будет только сохранять переменные?<br />Или с первого Thread копировать переменные в 3-ий Thread а потом уже оттуда их доставать?<br />Можно, конечно, INIWrite<br />А есть ли варианты без создания доплнительных файлов?</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2012-04-07T16:48:29Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=58979#p58979</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=58891#p58891" />
			<content type="html"><![CDATA[<p>Это не решение, а «костыль» который в любом виде не только для коллекции не применим, но и предлагаться как «вариант» не должен.</p><p>Функцию написать реально, при помощи таймера «это» делать не нужно, от вставки в «ключевых точках» вызова функции не уйти, «ключевые точки» подразумеваются не «через каждую строку», а из расчёта скорости выполнения отдельных участков кода.</p><p>Правильным было бы пересмотреть требуемое поведение скрипта — неужто на привязке к одной клавише сошелся клином свет, неужто подпрограмму нельзя представить совокупностью простых повторяющихся фрагментов, и т.д.</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2012-04-06T02:03:34Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=58891#p58891</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: При повторном нажатии кнопки прервать задержку]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=58885#p58885" />
			<content type="html"><![CDATA[<p>Интересное решение.<br />Сколько думал, а в голову не пришло.<br />Спасибо!<br />Завтра адаптирую и протестирую.<br />Может стоит его как-то обобщить и добавить в коллекцию с темой &quot;проверка завершения выполнения потока&quot;?<br />Потому что ответ на данный вопрос имхо не очевиден.<br />И с ходу вопрос<br /></p><div class="codebox"><pre><code>; действие 1
    ; проверка значения переменной breakThread и если 1 — breakThread := 0 и Exit
    ; действие 2
    ; проверка значения переменной breakThread и если 1 — breakThread := 0 и Exit
    ; и так далее
    ; return не нужен</code></pre></div><p>Реально ли написать функцию для проверки</p><div class="quotebox"><blockquote><p>; проверка значения переменной breakThread и если 1 — breakThread := 0 и Exit</p></blockquote></div><p>Или делать это с помощью таймера?<br />Так как для 5 строк это хорошо, а для ста, не очень - код вырастает в несколько раз.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2012-04-05T23:29:28Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=58885#p58885</id>
		</entry>
</feed>
