<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Синхронизация данных от SetUpdateCallback]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Синхронизация данных от SetUpdateCallback форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Tue, 14 Apr 2026 10:52:43 +0300</pubDate>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12254/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/702/" target="_blank" rel="nofollow">Максим</a></noindex>,<br /><br />====quote====<br />--этот кусок кода не исполняется<br />if (<B>curhms==oldt_si and curhms==oldt_eu</B> and data.eq==0 and GetEquity==true) then <br />=============<br />Подозреваю, что ошибка в выделенной части. Т.к. условие curhms==oldt_si and curhms==oldt_eu выполнится только при равенстве трёх переменных curhms, oldt_si, oldt_eu. Это ли имелось ввиду?<br />Кроме того, строка кода выше<br /><br />====quote====<br />if (<B>curhms==oldt_si and curhms==oldt_eu</B> ) then return end <br />=============<br />просто выходит из функции. Получается код, который не выполняется, действительно недостижим, т.к. приведённые условия совпадают. <br />
			<i>07.02.2016 19:17:25, Вячеслав.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12254/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12254/topic1342/</guid>
			<pubDate>Sun, 07 Feb 2016 19:17:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12243/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			примерно так:<table class="forum-spoiler"><thead onclick="if (this.nextSibling.style.display=='none') { this.nextSibling.style.display=''; BX.addClass(this, 'forum-spoiler-head-open'); } else { this.nextSibling.style.display='none'; BX.removeClass(this, 'forum-spoiler-head-open'); } BX.onCustomEvent('BX.Forum.Spoiler:toggle', [{node: this}]); event.stopPropagation();"><tr><th><div>Скрытый текст</div></th></tr></thead><tbody class="forum-spoiler" style="display:none;"><tr><td>--shares &nbsp;-- список инструментов<br />local oldt_si,oldt_eu,flag=0,0,0;<br />local ds={};<br />function main()<br />local i = 1<br />for sec,v in pairs(shares) do<br /> &nbsp; &nbsp;local t=ds&#91;i&#93;<br />if t==false then<br /> &nbsp; &nbsp;t,er= CreateDataSource(v.classcode,sec, INTERVAL_H1)<br /> &nbsp; &nbsp;if er==nil then<br /> &nbsp; &nbsp; &nbsp; &nbsp;t.clas=v.classcode;<br /> &nbsp; &nbsp; &nbsp; &nbsp;t.sec=sec;<br /> &nbsp; &nbsp; &nbsp; &nbsp;t:SetUpdateCallback(function(index) cb(index,ds&#91;i&#93;) end)<br /> &nbsp; &nbsp; &nbsp; &nbsp;toLog(log,&quot;ds added i=&quot;..i..&quot; classcode:&quot;..v.classcode..&quot; seccode:&quot;..sec)<br /> &nbsp; &nbsp; &nbsp; &nbsp;ds&#91;i&#93;=t;<br /> &nbsp; &nbsp;else Log(log,&quot;er=&quot;..er) end<br />end<br /> &nbsp; &nbsp;i=i+1<br />end<br /><br />while is_run do<br />sleep(1000)<br />end<br /><br />end<br /><br />function cb(ind,t)<br />local Ti = t:T(ind-1)<br />local h = Ti.hour<br />local curhms = h*10<br />if flag==2 and (curhms~=oldt_si or curhms~=oldt_si) then flag=0 end<br />if flag==2 then return end<br />if curhms==oldt_si then flag=flag+1; oldt_si=curhms &nbsp;end<br />if curhms==oldt_eu then flag=flag+1; oldt_eu=curhms &nbsp;end<br /><br />if flag==2 then<br />-- обработка<br /><br />end<br /><br />end <br /> </td></tr></tbody></table> <br />
			<i>07.02.2016 10:11:42, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12243/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12243/topic1342/</guid>
			<pubDate>Sun, 07 Feb 2016 10:11:42 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12240/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			либо введите флаг . И по нему блокируйте обработку. <br />
			<i>07.02.2016 10:02:40, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12240/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12240/topic1342/</guid>
			<pubDate>Sun, 07 Feb 2016 10:02:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12239/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			поставьте выравнивание после обработки. <br />
			<i>07.02.2016 10:02:01, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12239/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12239/topic1342/</guid>
			<pubDate>Sun, 07 Feb 2016 10:02:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12220/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Скорее всего просто код в функции cb() написан неверно. <br />
			<i>06.02.2016 11:31:32, Constantin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12220/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12220/topic1342/</guid>
			<pubDate>Sat, 06 Feb 2016 11:31:32 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12211/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			можно сделать очередь<br />либо использовать кораунды<br />а еще лучше переделать весь алгоритм <br />
			<i>05.02.2016 23:03:47, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12211/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12211/topic1342/</guid>
			<pubDate>Fri, 05 Feb 2016 23:03:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12205/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Суть такова: из main дергаются данные по доллару и евро, коллбэк cb их обрабатывает.<br />как только пришла новая свеча (1 час масштаб), я выравниваю время в коллбеке по доллару и евро, чтобы он не перерасчитывался многократно полностью. Для этого стоит условие на проверку выравнивания времени (предыдущее время сравнивается с текущим). <br />Однако, как только время по обоим инструментам выравнивается, кусок кода, который стоит после условных блоков с обработкой данных от инструментов, не исполняется, т к уже срабатывает return, стоящий в начале коллбэка. Т. е. получается ситуация, что время выравнялось, но код до конца не успел исполниться, т к произошел новый вызов, который делает выход из коллбека до того, как успел отработать последний кусок кода. <br /><br />function main()<br /> &nbsp; ............<br /> &nbsp; &nbsp;local i = 1<br /> &nbsp; &nbsp;for k,v in pairs(shares) do<br /> &nbsp; &nbsp; &nbsp; ds&#91;i&#93;,er= CreateDataSource(v.classcode,k, INTERVAL_H1)<br /> &nbsp; &nbsp; &nbsp; v.idx = i<br /> &nbsp; &nbsp; &nbsp; if er==nil then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ds&#91;i&#93;:SetUpdateCallback(function(index) cb(index,v.idx, v.classcode,k) end)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;toLog(log,&quot;ds added i=&quot;..i..&quot; classcode:&quot;..v.classcode..&quot; seccode:&quot;..k)<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i=i+1<br /> &nbsp; &nbsp; &nbsp; end<br /> &nbsp; &nbsp; &nbsp; if er~=nil then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Log(log,&quot;er=&quot;..er)<br /> &nbsp; &nbsp; &nbsp; end<br /> &nbsp; &nbsp;end<br /><br /> &nbsp; &nbsp;while is_run do<br /> &nbsp; &nbsp; &nbsp; &nbsp;sleep(1000)<br /> &nbsp; &nbsp;end<br /><br />..................<br />end<br /><br /><br /><br />function cb( index , ds_index, classcode, seccode)<br /><br /> &nbsp; &nbsp;local t = ds&#91;ds_index&#93;:T(index-1)<br /> &nbsp; &nbsp;local h = t.hour<br /> &nbsp; &nbsp;local curhms = h*100<br /><br /> &nbsp; &nbsp;if (curhms==oldt_si and curhms==oldt_eu ) then return end<br /><br /> &nbsp; &nbsp;if (ds_index==1 and curhms~=oldt_eu) then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;oldt_eu=curhms<br />...........................<br /> &nbsp; &nbsp; end<br /><br /> &nbsp; &nbsp;if (ds_index==2 and curhms~=oldt_si) then<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;oldt_si=curhms<br />...........................<br /> &nbsp; &nbsp; end<br />--этот кусок кода не исполняется<br />if (curhms==oldt_si and curhms==oldt_eu and data.eq==0 and GetEquity==true) then<br /> &nbsp; &nbsp; &nbsp; ..............<br /> &nbsp; &nbsp; &nbsp; &nbsp;<br /> &nbsp; &nbsp;end<br /><br />end<br /> &nbsp; &nbsp; <br />
			<i>05.02.2016 20:10:06, Максим.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12205/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12205/topic1342/</guid>
			<pubDate>Fri, 05 Feb 2016 20:10:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12144/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://forum.quik.ru/user/82/" target="_blank" rel="nofollow">swerg</a></noindex>,<br />так как текст программы не приведен, то Ваше замечание тоже не верно.<br />Например, если обработка данных от колбека делается в main.<br />Тогда очередной вызов колбека может изменить данные в таблице,<br /> через которую они передаются &nbsp;в функцию в майн.<br />Т е теоретически указанная выше ситуация возможна.<br />Но, повторюсь, из приведенного рассказа автора это явно не следует. <br />
			<i>05.02.2016 08:11:41, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12144/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12144/topic1342/</guid>
			<pubDate>Fri, 05 Feb 2016 08:11:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12138/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br />Очередной вызов коллбэка происходит тогда, &nbsp;когда еще не закончились обрабатываться предыдущие данные, которые его вызвали.<br />=============<br />Это неправда.<br />Один коллбэк работает от начала и до конца.<br />И только после этого может быть вызван повторно. <br />
			<i>05.02.2016 06:10:18, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12138/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12138/topic1342/</guid>
			<pubDate>Fri, 05 Feb 2016 06:10:18 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12129/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Попробую еще раз) Очередной вызов коллбэка происходит тогда, &nbsp;когда еще не закончились обрабатываться предыдущие данные, которые его вызвали. как с этим бороться? <br />
			<i>04.02.2016 20:50:05, Максим.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12129/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12129/topic1342/</guid>
			<pubDate>Thu, 04 Feb 2016 20:50:05 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12116/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Из рассказа не очень понятна проблема.<br />из понятого, попробуйте использовать Coroutines <br />
			<i>04.02.2016 18:52:58, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12116/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12116/topic1342/</guid>
			<pubDate>Thu, 04 Feb 2016 18:52:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация данных от SetUpdateCallback</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message12112/topic1342/">Синхронизация данных от SetUpdateCallback</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день!<br />Следующая ситуация: я получаю данные через SetUpdateCallback(function(index) cb(index,v.idx, v.classcode,k) end), там два инструмента. Данные приходят с разными задержками (в смысле срабатывания котировок). Это приводит к тому, что определенный кусок кода в функции cb (index,v.idx, v.classcode,k) у меня не исполняется, т к новые данные уже успели изменить значения переменных, но сама ф-я до конца не исполнилась. Наверняка есть локеры, которые не позволяют срабатывать коллбэку, пока не обработались старые значения. Наверное это не слишком оптимально, с точки зрения быстродействия, но в моем случае это не критично...<br />Спасибо. <br />ЗЫ заранее прошу прощения, если эта тема уже обсуждалась, т к проблема актуальная. но я не нашел. <br />
			<i>04.02.2016 18:12:15, Максим.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message12112/topic1342/</link>
			<guid>http://forum.quik.ru/messages/forum10/message12112/topic1342/</guid>
			<pubDate>Thu, 04 Feb 2016 18:12:15 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
