<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Синхронизация потоков в своей dll на с++]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Синхронизация потоков в своей dll на с++ форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Tue, 05 May 2026 12:36:20 +0300</pubDate>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message10477/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В последнем вопросе имелось ввиду:<br />Можно ли при завершении потока делать lua_unref(L, thread_L_ref); &nbsp;в самОм новом-созданном потоке, т.е. внутри функции потока myThread(LPVOID param) ? <br />
			<i>25.11.2015 15:14:30, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message10477/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message10477/topic212/</guid>
			<pubDate>Wed, 25 Nov 2015 15:14:30 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message10476/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_OA4C11Sk" href="/user/21/" bx-tooltip-user-id="21">Michael Bulychev</a> пишет: <br /><br />====quote====<br /> Дмитрий пишет: <br />Добрый день. Перечитал старый форум, но внятного ответа так и не нашёл. Наверняка уже многие делали то же, что и я, и многие ещё будут делать. Поэтому хочу уточнить один важный момент.<br />Есть Lua - скрипт, в котором подключается своя библиотека на c++. В этой библиотеке создаётся несколько потоков.Например, 1 поток будет отправлять заявки в Quik, другой поток будет читать таблицу параметров, ещё несколько потоков будут подписываться на ТВС и перебирать все сделки через CreateDataSource (а их может быть миллионы). В общем каждый поток будет одновременно запускать какие-то Lua-функции. А Lua - стек у нас только один. Вопрос:<br />нужно ли синхронизировать эти потоки и гарантировать вызов lua функций из dll в одно время только однажды ? Если да, то получается, что пока какой-то поток, например перебирает все сделки в цикле (миллион), то заявки отправлять нельзя ? Параметры читать нельзя ? Все задачи будут ждать завершения какого-то одного потока ? А если нужно одновременно в разных потоках вызвать CreateDataSource, каждый со своим инструментом, и одновременно их записывать в какие-либо массивы ?<br /><br />=============<br />Добрый день.<br />Я бы настоятельно советовал Вам посмотреть в сторону coroutine в Lua. Уверен, что их возможности полностью покроют описанные Вами задачи.<br />Но если желание наплодить потоков в своей библиотеке непреодолимо, то рекомендации ниже:<br />1. Линкуйте свою библиотеку с qlua.dll<br />2. Если пункт два вызывает вопросы, то убедитесь что в папке с терминалом (там же, где лежит info.exe и qlua.dll) присутствует файл lua5.1.dll собранный нами. Проверить это можно в свойствах файла:<br /> <br /> <br />3.Для каждого отдельного потока, который работает с Lua перед его запуском необходимо проделать примерно следующее:<br />
====code====
<pre>&nbsp;&nbsp; DWORD WINAPI myThread(LPVOID param) 
{&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp; lua_State&nbsp;&nbsp;* L&nbsp;&nbsp;=&nbsp;&nbsp;(lua_State * )param;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;..&nbsp;&nbsp;..&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp; 0 ;
}&nbsp;&nbsp; 
 .. . 
//вот тут формируется новый стек Lua для потока
lua_gc(L, LUA_GCSTOP,&nbsp;&nbsp;0 );&nbsp;&nbsp;
thread_L_stack&nbsp;&nbsp;=&nbsp;&nbsp;lua_newthread(L); 
thread_L_ref&nbsp;&nbsp;=&nbsp;&nbsp;luaL_ref( callbackCode, LUA_REGISTRYINDEX); 
lua_pushvalue(callbackCode,&nbsp;&nbsp;-&nbsp;&nbsp;1 );&nbsp;&nbsp;
lua_gc(L, LUA_GCRESTART,&nbsp;&nbsp;0 );&nbsp;&nbsp;
 .. .&nbsp;&nbsp;&nbsp;&nbsp;
CreateThread(NULL,&nbsp;&nbsp;0 , myThread, (LPVOID) tread_L_stack,&nbsp;&nbsp;0 , NULL);

&nbsp;&nbsp;</pre>
=============
4. При завершении работы поток не должен вызывать lua_close(thread_L), это приводит к закрытию всей Lua для скрипта.<br />5. для того чтобы сборщик мусора при завершении все корректно убрал необходимо сделать:<br />
====code====
<pre>&nbsp;&nbsp;lua_unref(L, thread_L_ref);&nbsp;&nbsp;</pre>
=============
Вроде все.<br />Но я бы все таки настоятельно рекомендовал использовать Lua coroutine<br /><br />=============<br />А что такое в коде &quot;callbackCode&quot; ?<br />По описанию функции там должен быть &nbsp;lua_State. Какой подставлять - L или thread_L_stack ?<br /><br />И можно ли при завершении потока делать thread_L_stack в самОм новом-созданном потоке, т.е. внутри функции потока myThread(LPVOID param) &nbsp;? <br />
			<i>25.11.2015 15:12:22, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message10476/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message10476/topic212/</guid>
			<pubDate>Wed, 25 Nov 2015 15:12:22 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1646/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день,<br />Добавлю свой стакан бензина в костер дискуссии.<br />--------------------------<br />Есть как минимум два варианта<br />1) несколько скриптов с обменом информацией между скриптами<br />2) несколько потоков и один из них main с дополнительной синхронизацией потоков<br />----------------------------<br />Хотя поток входных данных с сервера один, но это не мешает сделать параллельную обработку, <br />так как обработка данных умным роботом требует значительных ресурсов.<br /> А обработку по разным инструментам можно делать параллельно без проблем.<br />-------------------------------<br />Из собственного опыта замечу, <br />что в QUIKe на существующем уровне реализуются оба способа( реализовал год назад оба) <br />
			<i>02.03.2015 18:19:07, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1646/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1646/topic212/</guid>
			<pubDate>Mon, 02 Mar 2015 18:19:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1614/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_fZkRCkRQ" href="/user/107/" bx-tooltip-user-id="107">Constantin Constantin</a> пишет: <br /><br />====quote====<br /> lergen пишет: <br />Ок спасибо понятно. Похоже что реально многопоточность можно получить только разделив функции между разными скриптами.<br /><br />=============<br />Параллельно будет работать только код в main. Все колбаки вызываются в основном потоке Квика.<br /><br />=============<br />Ну хотя бы так. <br />
			<i>02.03.2015 08:03:40, lergen.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1614/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1614/topic212/</guid>
			<pubDate>Mon, 02 Mar 2015 08:03:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1584/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_8x9BOvgS" href="/user/183/" bx-tooltip-user-id="183">lergen</a> пишет: <br />Ок спасибо понятно. Похоже что реально многопоточность можно получить только разделив функции между разными скриптами.<br /><br />=============<br />Параллельно будет работать только код в main. Все колбаки вызываются в основном потоке Квика. <br />
			<i>01.03.2015 11:09:00, Constantin Constantin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1584/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1584/topic212/</guid>
			<pubDate>Sun, 01 Mar 2015 11:09:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1583/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_0KnIa7zZ" href="/user/183/" bx-tooltip-user-id="183">lergen</a> пишет: <br />Похоже что реально многопоточность можно получить только разделив функции между разными скриптами.<br /><br />=============<br />в самом простом случае - Да.<br /><br />И даже это нельзя будет назвать истинной многопоточностью - потому что квик работает с одним потоком данных и остальные скрипты просто будут ждать своей очереди для доступа к нему. <br />
			<i>01.03.2015 10:25:54, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1583/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1583/topic212/</guid>
			<pubDate>Sun, 01 Mar 2015 10:25:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1581/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_hsAEPKWI" href="/user/107/" bx-tooltip-user-id="107">Constantin Constantin</a> пишет: <br />lergen , корутины работают по принципу кооперативной многопоточности, то есть пока один поток явно не отдаст управление, другой не продолжит свое выполнение. Фактически работает один поток с переключением на разные точки исполнения программы.<br /><br />=============<br />Ок спасибо понятно. Похоже что реально многопоточность можно получить только разделив функции между разными скриптами. <br />
			<i>01.03.2015 09:36:02, lergen.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1581/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1581/topic212/</guid>
			<pubDate>Sun, 01 Mar 2015 09:36:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1564/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_kAsVqygl" href="/user/183/" bx-tooltip-user-id="183">lergen</a>, корутины работают по принципу кооперативной многопоточности, то есть пока один поток явно не отдаст управление, другой не продолжит свое выполнение. Фактически работает один поток с переключением на разные точки исполнения программы. <br />
			<i>28.02.2015 11:34:16, Constantin Constantin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1564/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1564/topic212/</guid>
			<pubDate>Sat, 28 Feb 2015 11:34:16 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1563/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="http://forum.quik.ru/user/707/" target="_blank" rel="nofollow">Дмитрий</a></noindex>,<br />1) Вот здесь:<br />"ещё несколько потоков будут подписываться на ТВС и перебирать все сделки через CreateDataSource (а их может быть миллионы). "<br />У Вас огромные резервы в повышении производительности. <br />Рекомендую полностью пересмотреть Вашу концепцию &nbsp;обработки информации.<br />-----------------------------------------------<br />2) Следует учитывать что сораунды не позволяют задействовать множество ядер в процессоре &nbsp;или множество процессоров в кластере. <br />Они позволяют переключаться лишь между фрагментами алгоритма в рамках одного ядра. <br />
			<i>28.02.2015 10:44:57, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1563/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1563/topic212/</guid>
			<pubDate>Sat, 28 Feb 2015 10:44:57 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1558/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			имеется ввиду не потоки операционной сисиемы, а псевдомногопочность на основе LUA. Почитайте здесь: <br /><noindex><a href="http://quik2dde.ru/viewtopic.php?id=131" target="_blank" rel="nofollow">http://quik2dde.ru/viewtopic.php?id=131</a></noindex><br /><noindex><a href="http://quik2dde.ru/viewtopic.php?id=130" target="_blank" rel="nofollow">http://quik2dde.ru/viewtopic.php?id=130</a></noindex> <br />
			<i>27.02.2015 22:25:52, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1558/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1558/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 22:25:52 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1555/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			По поводу *coroutine* вопрос. В руководстве по Люа coroutine описывается как средство создания многопоточной среды. В данном случае многопоточность означает одновременное исполнение в двух потоках или это о другом? <br />
			<i>27.02.2015 21:42:46, lergen.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1555/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1555/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 21:42:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1513/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Спасибо. Буду думать как лучше сделать. <br />
			<i>27.02.2015 10:20:53, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1513/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1513/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 10:20:53 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1505/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_KHl5ojPH" href="/user/21/" bx-tooltip-user-id="21">Michael Bulychev</a> пишет: <br />Можно считать, что "обычная" C-функция является частным случаем C closure, у которой нет upvalues.<br /><br />=============<br />да. уже прочитал: <noindex><a href="http://www.lua.org/pil/27.3.3.html" target="_blank" rel="nofollow">http://www.lua.org/pil/27.3.3.html</a></noindex> <br />
			<i>27.02.2015 09:05:06, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1505/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1505/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 09:05:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1504/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Можно считать, что "обычная" C-функция является частным случаем C closure, у которой нет upvalues. <br />
			<i>27.02.2015 08:47:49, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1504/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1504/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 08:47:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1502/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			просто для меня понятия: просто функция и closure - несколько различаются. <br />
			<i>27.02.2015 08:32:26, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1502/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1502/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 08:32:26 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1501/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_gHTWOXj5" href="/user/137/" bx-tooltip-user-id="137">sam063rus</a> пишет: <br /><noindex><a href="http://forum.quik.ru/user/21/" target="_blank" rel="nofollow">Michael Bulychev</a></noindex> <br /><br />получается, если верить Вашим словам - то у Вас должно быть так:<br />#define lua_register(L,n,f) (lua_pushcfunction(L, (getNumberOf)), lua_setglobal(L, ("getNumberOf" &nbsp;;) &nbsp;))<br /><br />=============<br />отсюда, разворачиваем макросы, получаем:<br />#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0)<br /><br />т.е. &nbsp;в итоге:<br /><br />lua_pushcclosure(L, getNumberOf)<br />lua_setfield(L, GLOBALSINDEX, "getNumberOf"<br /><br /><br />вот про это я и спрашиваю. Почему именно lua_pushcclosure? <br />
			<i>27.02.2015 08:20:16, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1501/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1501/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 08:20:16 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1500/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_htDTGN5k" href="/user/137/" bx-tooltip-user-id="137">sam063rus</a> пишет: <br /><noindex><a href="http://forum.quik.ru/user/21/" target="_blank" rel="nofollow">Michael Bulychev</a></noindex> <br /><br />получается, если верить Вашим словам - то у Вас должно быть так:<br />#define lua_register(L,n,f) (lua_pushcfunction(L, (getNumberOf)), lua_setglobal(L, ("getNumberOf" ;) ))<br /><br />=============<br />Примерно так и есть <br />
			<i>27.02.2015 08:16:37, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1500/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1500/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 08:16:37 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1499/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="http://forum.quik.ru/user/21/" target="_blank" rel="nofollow">Michael Bulychev</a></noindex><br /><br />получается, если верить Вашим словам - то у Вас должно быть так:<br />#define lua_register(L,n,f) (lua_pushcfunction(L, (getNumberOf)), lua_setglobal(L, ("getNumberOf"))) <br />
			<i>27.02.2015 07:53:14, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1499/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1499/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 07:53:14 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1498/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			ладно. не хотите говорить - не надо. <br />
			<i>27.02.2015 07:46:33, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1498/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1498/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 07:46:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1497/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			====code====
<pre>#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n))) 

</pre>
============= <br />
			<i>27.02.2015 07:45:07, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1497/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1497/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 07:45:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1496/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			)))тогда другой вопрос: а как?))) <br />
			<i>27.02.2015 07:43:08, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1496/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1496/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 07:43:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1495/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Нет <br />
			<i>27.02.2015 07:40:08, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1495/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1495/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 07:40:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1494/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			но ведь именно так вы регистрируете в qlua свои функции? <br />
			<i>27.02.2015 07:36:04, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1494/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1494/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 07:36:04 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1493/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_gptkLdlw" href="/user/137/" bx-tooltip-user-id="137">sam063rus</a> пишет: <br />как добавлять из C++ новые функции через closure.<br /><br />=============<br />Поясните свою мысль? Для чего это? <br />
			<i>27.02.2015 07:34:24, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1493/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1493/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 07:34:24 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1492/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="http://forum.quik.ru/user/21/" target="_blank" rel="nofollow">Michael Bulychev</a></noindex><br /><br />К Вам предложение, дополнить на <noindex><a href="http://quik2dde.ru" target="_blank" rel="nofollow">общеизвестном</a></noindex> форуме соответствующие темы, а также написать больше примеров того, как добавлять из C++ новые функции через closure. <br />
			<i>27.02.2015 07:29:54, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1492/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1492/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 07:29:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1491/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_3T7Rzopu" href="/user/707/" bx-tooltip-user-id="707">Дмитрий</a> пишет: <br />Добрый день. Перечитал старый форум, но внятного ответа так и не нашёл. Наверняка уже многие делали то же, что и я, и многие ещё будут делать. Поэтому хочу уточнить один важный момент.<br />Есть Lua - скрипт, в котором подключается своя библиотека на c++. В этой библиотеке создаётся несколько потоков.Например, 1 поток будет отправлять заявки в Quik, другой поток будет читать таблицу параметров, ещё несколько потоков будут подписываться на ТВС и перебирать все сделки через CreateDataSource (а их может быть миллионы). В общем каждый поток будет одновременно запускать какие-то Lua-функции. А Lua - стек у нас только один. Вопрос:<br />нужно ли синхронизировать эти потоки и гарантировать вызов lua функций из dll в одно время только однажды ? Если да, то получается, что пока какой-то поток, например перебирает все сделки в цикле (миллион), то заявки отправлять нельзя ? Параметры читать нельзя ? Все задачи будут ждать завершения какого-то одного потока ? А если нужно одновременно в разных потоках вызвать CreateDataSource, каждый со своим инструментом, и одновременно их записывать в какие-либо массивы ?<br /><br />=============<br />Добрый день.<br />Я бы настоятельно советовал Вам посмотреть в сторону coroutine в Lua. Уверен, что их возможности полностью покроют описанные Вами задачи.<br />Но если желание наплодить потоков в своей библиотеке непреодолимо, то рекомендации ниже:<br />1. Линкуйте свою библиотеку с qlua.dll<br />2. Если пункт два вызывает вопросы, то убедитесь что в папке с терминалом (там же, где лежит info.exe и qlua.dll) присутствует файл lua5.1.dll собранный нами. Проверить это можно в свойствах файла:<br /><img src="http://i.imgur.com/Ty5WFGv.png" alt="Пользователь добавил изображение" border="0" /><br /><img src="http://i.imgur.com/lj1M93E.png" alt="Пользователь добавил изображение" border="0" /><br />3.Для <B>каждого</B> отдельного потока, который работает с Lua перед его запуском необходимо проделать примерно следующее:<br /><br />
====code====
<pre> DWORD WINAPI myThread(LPVOID param) 
{&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;lua_State *L = (lua_State*)param;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;....&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;return 0;
}&nbsp;&nbsp; 
... 
//вот тут формируется новый стек Lua для потока
lua_gc(L, LUA_GCSTOP, 0);&nbsp;&nbsp;
thread_L_stack = lua_newthread(L); 
thread_L_ref = luaL_ref( callbackCode, LUA_REGISTRYINDEX); 
lua_pushvalue(callbackCode, -1);&nbsp;&nbsp;
lua_gc(L, LUA_GCRESTART, 0);&nbsp;&nbsp;
...&nbsp;&nbsp;&nbsp;&nbsp;
CreateThread(NULL, 0, myThread, (LPVOID) tread_L_stack, 0, NULL);

</pre>
=============
4. При завершении работы поток <B>не должен</B> вызывать lua_close(thread_L), это приводит к закрытию всей Lua для скрипта.<br />5. для того чтобы сборщик мусора при завершении все корректно убрал необходимо сделать:<br />
====code====
<pre>lua_unref(L, thread_L_ref);</pre>
=============
Вроде все.<br />Но я бы все таки настоятельно рекомендовал использовать Lua coroutine <br />
			<i>27.02.2015 06:51:05, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1491/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1491/topic212/</guid>
			<pubDate>Fri, 27 Feb 2015 06:51:05 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1483/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			тема многопоточности, а тем более многопоточности в QLUA - тянет на целую книгу. в одном топике - вам тут никто не ответит на весь список ваших вопросов. Для начала, почитайте вот этот форум: quik2dde.ru. После того, как ВЕСЬ! его прочитаете - прочитайте ещё раза 2.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_ZfF2KSEw" href="/user/707/" bx-tooltip-user-id="707">Дмитрий</a> пишет: <br />Перечитал старый форум, но внятного ответа так и не нашёл.<br /><br />=============<br />а потому что его и нет))) внятный ответ должны дать Вы сами, бо как изначально, LUA задумывалась, как однопоточная, потом к ней добавили корутины, дочерние состояния (child lua_State) и пр.<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_Dhm1BSxI" href="/user/707/" bx-tooltip-user-id="707">Дмитрий</a> пишет: <br />Наверняка уже многие делали то же, что и я, и многие ещё будут делать.<br /><br />=============<br />увы, таких единицы, если считать, чтоб всё ещё СТАБИЛЬНО работало. Дело в том, что сама QLUA постоянно меняется и постоянно допиливается. поэтому, пока не будет нормальной/стабильной "базы" - все наши "устремления" - лишь жалкие поделки, особенно, принимая во внимание изначальную полную "сопливость" штатной дкументации по QLUA. <br />
			<i>26.02.2015 20:37:02, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1483/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1483/topic212/</guid>
			<pubDate>Thu, 26 Feb 2015 20:37:02 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Синхронизация потоков в своей dll на с++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1482/topic212/">Синхронизация потоков в своей dll на с++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день. Перечитал старый форум, но внятного ответа так и не нашёл. Наверняка уже многие делали то же, что и я, и многие ещё будут делать. Поэтому хочу уточнить один важный момент.<br />Есть Lua - скрипт, в котором подключается своя библиотека на c++. В этой библиотеке создаётся несколько потоков.Например, 1 поток будет отправлять заявки в Quik, другой поток будет читать таблицу параметров, ещё несколько потоков будут подписываться на ТВС и перебирать все сделки через CreateDataSource (а их может быть миллионы). В общем каждый поток будет одновременно запускать какие-то Lua-функции. А Lua - стек у нас только один. Вопрос:<br />нужно ли синхронизировать эти потоки и гарантировать вызов lua функций из dll в одно время только однажды ? Если да, то получается, что пока какой-то поток, например перебирает все сделки в цикле (миллион), то заявки отправлять нельзя ? Параметры читать нельзя ? Все задачи будут ждать завершения какого-то одного потока ? А если нужно одновременно в разных потоках вызвать CreateDataSource, каждый со своим инструментом, и одновременно их записывать в какие-либо массивы ? <br />
			<i>26.02.2015 19:11:04, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1482/topic212/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1482/topic212/</guid>
			<pubDate>Thu, 26 Feb 2015 19:11:04 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
