<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Внешняя DLL + CreateDataSource + Lua - стек]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Внешняя DLL + CreateDataSource + Lua - стек форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sat, 11 Apr 2026 17:58:48 +0300</pubDate>
		<item>
			<title>Внешняя DLL + CreateDataSource + Lua - стек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2249/topic293/">Внешняя DLL + CreateDataSource + Lua - стек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			И. сейчас эта функция вызывается из порождённого потока, если стек передан из main, то всё работает. <br />
			<i>19.03.2015 14:49:36, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2249/topic293/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2249/topic293/</guid>
			<pubDate>Thu, 19 Mar 2015 14:49:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Внешняя DLL + CreateDataSource + Lua - стек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2248/topic293/">Внешняя DLL + CreateDataSource + Lua - стек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_WXlzI6c2" href="/user/21/" bx-tooltip-user-id="21">Michael Bulychev</a> пишет: <br />QSubscribeAllTrades вызывается в других потоках порождаемых Вашей DLL?<br /><br />=============<br />Да, но также тестировал и в main и в OnInit - разницы нет. <br />
			<i>19.03.2015 14:44:48, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2248/topic293/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2248/topic293/</guid>
			<pubDate>Thu, 19 Mar 2015 14:44:48 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Внешняя DLL + CreateDataSource + Lua - стек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2230/topic293/">Внешняя DLL + CreateDataSource + Lua - стек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			QSubscribeAllTrades вызывается в других потоках порождаемых Вашей DLL? <br />
			<i>19.03.2015 07:23:55, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2230/topic293/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2230/topic293/</guid>
			<pubDate>Thu, 19 Mar 2015 07:23:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Внешняя DLL + CreateDataSource + Lua - стек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2229/topic293/">Внешняя DLL + CreateDataSource + Lua - стек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вот функция в Lua скрипте. При первом запуске она подписывается на сделки, при всех последующих просто выводит Size()<br />
====code====
<pre>tds = {}
function SubscribeAllTrades(classcode, seccode, loadalltradesafternum)&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;local gcsck = GetClassSecCodeKey(classcode, seccode)

&nbsp;&nbsp;&nbsp;if gcsck == "" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0
&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if tds&#91;gcsck&#93; == nil then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local ds = CreateDataSource(classcode, seccode, INTERVAL_TICK)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ds == nil then return 0 end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:SetEmptyCallback()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(50)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:Close()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds = nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds = CreateDataSource(classcode, seccode, INTERVAL_TICK)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:SetEmptyCallback()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(50)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:Close()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds = nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds = CreateDataSource(classcode, seccode, INTERVAL_TICK)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:SetEmptyCallback()&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tds&#91;gcsck&#93; = ds
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds = nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(100)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local str = tostring(tds&#91;gcsck&#93;:Size())&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr(str)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;end&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
end
 </pre>
=============
<br />Вот функция в библиотеке DLL<br /><br />
====code====
<pre>bool QSubscribeAllTrades(lua_State *L, const string classcode, const string seccode, unsigned int loadalltradesafternum)
{
&nbsp;&nbsp;&nbsp;lua_getfield(L, LUA_GLOBALSINDEX, "SubscribeAllTrades");
&nbsp;&nbsp;&nbsp;lua_pushstring(L, classcode.c_str());
&nbsp;&nbsp;&nbsp;lua_pushstring(L, seccode.c_str());&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;lua_pushnumber(L, loadalltradesafternum);
&nbsp;&nbsp;&nbsp;lua_call(L, 3, 1);
&nbsp;&nbsp;&nbsp;long R = (int)lua_tointeger(L, -1);
&nbsp;&nbsp;&nbsp;lua_pop(L, 1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;return (R == 1);
}
 </pre>
=============
Запускаем эту функцию в цикле 100000 раз. Если передаваемый &nbsp;lua_State *L не из main, то quik падает в неожиданных и разных местах кода. Если в функции не обращаться к полям CreateDataSource, то всё работает нормально и &nbsp;lua_State *L значения не имеет. <br />
			<i>19.03.2015 06:42:18, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2229/topic293/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2229/topic293/</guid>
			<pubDate>Thu, 19 Mar 2015 06:42:18 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Внешняя DLL + CreateDataSource + Lua - стек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2228/topic293/">Внешняя DLL + CreateDataSource + Lua - стек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_OMlPi7TE" href="/user/21/" bx-tooltip-user-id="21">Michael Bulychev</a> пишет: <br /><br />====quote====<br /> Дмитрий пишет: <br />Месяцвозился с проблемой. При обращении к функции CreateDataSource из внешней dll периодически падал quik. В цикле 100000 раз обращался к полю Size(). Причём падал совершенно в разных местах и воспроизвести однозначно проблему не получалось. Слинковал dll с qlua.dll падения прекратились, но quik просто стал намертво зависать. В ходе манипуляций выяснил, что обращаться к полям CreateDataSource нужно по стеку (lua_state), полученному из функции main, а например, не в каком-нибудь OnInit(). Сохранил указатель lua_state *L в функции main и падения квика прекратились.<br />Ничего тут не спрашиваю, просто предупреждаю. Ребята, имейте это ввиду, чтобы не мучались.<br /><br />=============<br />Добрый день.<br />Сообщите версию терминала, на которой проводили исследования.<br /><br />=============<br />6.16.1.15 <br />
			<i>19.03.2015 06:29:54, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2228/topic293/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2228/topic293/</guid>
			<pubDate>Thu, 19 Mar 2015 06:29:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Внешняя DLL + CreateDataSource + Lua - стек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2227/topic293/">Внешняя DLL + CreateDataSource + Lua - стек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_QZx20PU3" href="/user/707/" bx-tooltip-user-id="707">Дмитрий</a> пишет: <br />Месяцвозился с проблемой. При обращении к функции CreateDataSource из внешней dll периодически падал quik. В цикле 100000 раз обращался к полю Size(). Причём падал совершенно в разных местах и воспроизвести однозначно проблему не получалось. Слинковал dll с qlua.dll падения прекратились, но quik просто стал намертво зависать. В ходе манипуляций выяснил, что обращаться к полям CreateDataSource нужно по стеку (lua_state), полученному из функции main, а например, не в каком-нибудь OnInit(). Сохранил указатель lua_state *L в функции main и падения квика прекратились.<br />Ничего тут не спрашиваю, просто предупреждаю. Ребята, имейте это ввиду, чтобы не мучались.<br /><br />=============<br />Добрый день.<br />Сообщите версию терминала, на которой проводили исследования. <br />
			<i>19.03.2015 05:13:39, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2227/topic293/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2227/topic293/</guid>
			<pubDate>Thu, 19 Mar 2015 05:13:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Внешняя DLL + CreateDataSource + Lua - стек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2210/topic293/">Внешняя DLL + CreateDataSource + Lua - стек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			полный пример в студию. <br />
			<i>18.03.2015 18:21:24, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2210/topic293/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2210/topic293/</guid>
			<pubDate>Wed, 18 Mar 2015 18:21:24 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Внешняя DLL + CreateDataSource + Lua - стек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2181/topic293/">Внешняя DLL + CreateDataSource + Lua - стек</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Месяцвозился с проблемой. При обращении к функции CreateDataSource из внешней dll периодически падал quik. В цикле 100000 раз обращался к полю Size(). Причём падал совершенно в разных местах и воспроизвести однозначно проблему не получалось. Слинковал dll с qlua.dll падения прекратились, но quik просто стал намертво зависать. В ходе манипуляций выяснил, что обращаться к полям CreateDataSource нужно по стеку (lua_state), полученному из функции main, а например, не в каком-нибудь OnInit(). Сохранил указатель lua_state *L в функции main и падения квика прекратились.<br />Ничего тут не спрашиваю, просто предупреждаю. Ребята, имейте это ввиду, чтобы не мучались. <br />
			<i>18.03.2015 08:06:44, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2181/topic293/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2181/topic293/</guid>
			<pubDate>Wed, 18 Mar 2015 08:06:44 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
