<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: quik 64 вызов функции lua  из dll c++]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме quik 64 вызов функции lua  из dll c++ форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sun, 03 May 2026 11:32:24 +0300</pubDate>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message43098/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_5HrTUCom" href="/user/9506/" bx-tooltip-user-id="9506">Алексей</a> написал:<br />join() выступает как электронное табло в сбербанке<br />=============<br /><noindex><a href="https://www.youtube.com/watch?v=qAYph2vanJ8" target="_blank" rel="nofollow">Конгениально.</a></noindex> <br />
			<i>27.03.2020 23:33:59, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message43098/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message43098/topic5174/</guid>
			<pubDate>Fri, 27 Mar 2020 23:33:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message43097/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><br /><br />=============<br /> <br />
			<i>27.03.2020 22:32:59, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message43097/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message43097/topic5174/</guid>
			<pubDate>Fri, 27 Mar 2020 22:32:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message43096/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			По созданию нативного потока я не стал связываться с сложным &quot;_beginthreadex&quot; а поступил проще <br />
====code====
<pre>void pr(lua_State * A)
{thread athr1(newpotok, A); athr1.detach();}
&nbsp;&nbsp;&nbsp;

static int forLua_runMAIN1(lua_State * A)
{thread athr(pr, A);athr.join(); return(0);}
</pre>
=============
поясню почему; сначала вызывается поток join() для того чтобы упорядочить порядок вызовов если мы запускаем несколько потоков в каждом из которых выполняется конкретная функция &nbsp;join() выступает как электронное табло в сбербанке к примеру а если мы выполним сразу detach() то возникнет хаос и это приводит к ошибкам ну а так все работает ровно и аккуратно <br />
			<i>27.03.2020 21:53:46, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message43096/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message43096/topic5174/</guid>
			<pubDate>Fri, 27 Mar 2020 21:53:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message43037/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_cwmf8tlH" href="/user/9506/" bx-tooltip-user-id="9506">Алексей</a> написал:<br />помог немного))<br />=============<br />Ну раз немного помогло, давайте продвинемся еще<br />
====code====
<pre>#define STRICT
#define WIN32_LEAN_AND_MEAN
#define VC_EXTRALEAN
#define NOMINMAX
#define WINVER 0x0600
#define _WIN32_WINNT WINVER
#include &#60;Windows.h&#62;
#include &#60;process.h&#62;

extern "C"
{
#include "luaconf.h"
#include "lua.h"
#include "lauxlib.h"
}

#pragma comment(lib, "lua5.1.lib")

// здесь будет храниться ссылка на стейт нового потока.
// глобальная переменная - плохое решение, но для демки сойдет,
// более интересные варианты только добавят ненужной здесь сложности
static int tref = LUA_NOREF;

// это "полезная" функция, выполняемая в новом потоке
static void some_useful_function(lua_State * s)
{
&nbsp;&nbsp;&nbsp;// показываем сообщение о запуске
&nbsp;&nbsp;&nbsp;lua_getglobal(s, "message");
&nbsp;&nbsp;&nbsp;lua_pushliteral(s, "Эта функция выполняется в новом потоке. Выполняется, выполняется...");
&nbsp;&nbsp;&nbsp;lua_call(s, 1, 0);
&nbsp;&nbsp;&nbsp;// три секунды имитируем бурную деятельность
&nbsp;&nbsp;&nbsp;::Sleep(3000);
&nbsp;&nbsp;&nbsp;// показываем сообщение об остановке
&nbsp;&nbsp;&nbsp;lua_getglobal(s, "message");
&nbsp;&nbsp;&nbsp;lua_pushliteral(s, "&nbsp;&nbsp;&nbsp;&nbsp;...кончила выполняться.");
&nbsp;&nbsp;&nbsp;lua_call(s, 1, 0);
}

// это стартовая функция для нашего нового потока
static unsigned int __stdcall thrd(void * pvoid)
{
&nbsp;&nbsp;&nbsp;// сохраняем переданный стейт.
&nbsp;&nbsp;&nbsp;// обратите внимание, что в этом потоке мы работаем только со стейтом,
&nbsp;&nbsp;&nbsp;// созданным специально для этого потока. мы никогда не трогаем стейты
&nbsp;&nbsp;&nbsp;// других потоков и другие потоки не должны трогать наш стейт
&nbsp;&nbsp;&nbsp;lua_State * n = static_cast&#60;lua_State *&#62;(pvoid);
&nbsp;&nbsp;&nbsp;// вызываем "полезную" функцию, передавая ей свой стейт
&nbsp;&nbsp;&nbsp;::some_useful_function(n);
&nbsp;&nbsp;&nbsp;// освобождаем ссылку на свой стейт, чтобы коллектор мог его прибить. если
&nbsp;&nbsp;&nbsp;// этого не сделать, стейт доживет до закрытия квика даже после остановки
&nbsp;&nbsp;&nbsp;// запустившего нас &#91;в огород&#93; скрипта (т.е. будет утечка памяти)
&nbsp;&nbsp;&nbsp;luaL_unref(n, LUA_REGISTRYINDEX, ::tref);
&nbsp;&nbsp;&nbsp;::tref = LUA_NOREF;
&nbsp;&nbsp;&nbsp;// с этого момента коллектор имеет право прибить наш стейт когда хочет, т.е.
&nbsp;&nbsp;&nbsp;// для нас его уже не существует, хотя, возможно, где-то в дебрях квика он
&nbsp;&nbsp;&nbsp;// еще будет болтаться некоторое время
&nbsp;&nbsp;&nbsp;n = nullptr;
&nbsp;&nbsp;&nbsp;// сейчас мы вернем управление и поток будет прибит. это приведет к тому, что
&nbsp;&nbsp;&nbsp;// хэндл потока, на котором ждет наш main, перейдет в состояние signaled,
&nbsp;&nbsp;&nbsp;// функция WaitForSingleObject вернет управление и main будет разблокирован
&nbsp;&nbsp;&nbsp;return 0;
}

// это main для квика (внезапно сишный)
static int qmain(lua_State * s)
{
&nbsp;&nbsp;&nbsp;// создаем новый стейт для потока.
&nbsp;&nbsp;&nbsp;// стейт также появится на вершине стека s
&nbsp;&nbsp;&nbsp;lua_State * n = lua_newthread(s);
&nbsp;&nbsp;&nbsp;// создаем ссылку на стейт, чтобы коллектор случайно не прибил его раньше времени.
&nbsp;&nbsp;&nbsp;// функция также выдернет стейт n с вершины стека s, вернув стек s в состояние,
&nbsp;&nbsp;&nbsp;// в котором он был до вызова lua_newthread
&nbsp;&nbsp;&nbsp;::tref = luaL_ref(s, LUA_REGISTRYINDEX);
&nbsp;&nbsp;&nbsp;// создаем нативный поток и передаем ему созданный стейт n
&nbsp;&nbsp;&nbsp;unsigned int tid;
&nbsp;&nbsp;&nbsp;HANDLE h = reinterpret_cast&#60;HANDLE&#62;(::_beginthreadex(NULL, 0, ::thrd, n, CREATE_SUSPENDED, &#38;tid));
&nbsp;&nbsp;&nbsp;if(NULL == h)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// в случае ошибки поток не создан, поэтому не забываем прибить ссылку на новый стейт,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// иначе он останется в памяти до завершения квика (утечка памяти)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;luaL_unref(s, LUA_REGISTRYINDEX, ::tref);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::tref = LUA_NOREF;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;luaL_error(s, "_beginthreadex failed");
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;// обратите внимание, что в текущем потоке трогать стейт n больше нельзя, у него теперь новый хозяин,
&nbsp;&nbsp;&nbsp;// который позаботится также и о его освобождении. поэтому мы сразу же обнуляем указатель на стейт,
&nbsp;&nbsp;&nbsp;// чтобы случайные попытки туда влезть вызывали крэш
&nbsp;&nbsp;&nbsp;n = nullptr;
&nbsp;&nbsp;&nbsp;// запускаем новый поток на выполнение
&nbsp;&nbsp;&nbsp;::ResumeThread(h);
&nbsp;&nbsp;&nbsp;// здесь main может делать что-то другое, второй поток работает параллельно. но
&nbsp;&nbsp;&nbsp;// перед тем, как из мейна выйти, нужно убедиться, что все дополнительные потоки уже завершены.
&nbsp;&nbsp;&nbsp;// по-хорошему им сначала надо как-то посигналить "все бросай и на выход бегом", а уже потом ждать, но
&nbsp;&nbsp;&nbsp;// мы не будем лезть в дебри в рамках простой демки. поскольку нам в main особо делать нечего, мы сразу
&nbsp;&nbsp;&nbsp;// переходим к ожиданию завершения второго потока. попробуйте закомментировать следующую строку, если
&nbsp;&nbsp;&nbsp;// хотите посмотреть, как через три секунды к квику придет внезапный полярный зверек
&nbsp;&nbsp;&nbsp;::WaitForSingleObject(h, INFINITE);
&nbsp;&nbsp;&nbsp;// не забываем закрыть хэндл потока, иначе он доживет до закрытия квика (утечка хэндла)
&nbsp;&nbsp;&nbsp;::CloseHandle(h);
&nbsp;&nbsp;&nbsp;return 0;
}

extern "C" __declspec(dllexport) int qtest(lua_State * s)
{
&nbsp;&nbsp;&nbsp;// мы хотим, чтобы в качестве колбека main работала наша сишная qmain
&nbsp;&nbsp;&nbsp;lua_pushcclosure(s, qmain, 0);
&nbsp;&nbsp;&nbsp;lua_setglobal(s, "main");
&nbsp;&nbsp;&nbsp;return 0;
}
</pre>
============= <br />
			<i>25.03.2020 20:44:59, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message43037/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message43037/topic5174/</guid>
			<pubDate>Wed, 25 Mar 2020 20:44:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message43035/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вот и снова наступил свободный денек,решил добить данную тему, даю вам ссылку кто еще не понял в каком направлении двигаться <noindex><a href="https://qarchive.ru/198607_ekvivalent_lua_coroutine_create_v_s___s_ispol_zovaniem_lua_newthread" target="_blank" rel="nofollow">https://qarchive.ru/198607_ekvivalent_lua_coroutine_create_v_s___s_ispol_zova<WBR/>&shy;niem_lua_newthread</a></noindex> да и спасибо <noindex><a href="https://forum.quik.ru/user/1222/" target="_blank" rel="nofollow">Anton</a></noindex> помог немного)) <br />
			<i>25.03.2020 20:07:45, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message43035/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message43035/topic5174/</guid>
			<pubDate>Wed, 25 Mar 2020 20:07:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message42727/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_NF93wE4a" href="/user/9506/" bx-tooltip-user-id="9506">Алексей</a> написал:<br />(1 Создает новый поток, толкает его в стек и возвращает указатель на lua_State, который представляет этот новый поток.<br />=============<br />Таки нет, оно вообще никакой поток не создает. Оно создает <B>стейт</B> для нового потока, и вы когда с ним вызываете lua_pcall, вы выполняете вызываемую функцию <B>в том же самом потоке</B>, только <B>в другом стейте</B>. Вам надо этот стейт передать теперь новому нативному потоку (а не основной стейт, как у вас было). Основной стейт из нового потока вообще трогать нельзя. <br />
			<i>15.03.2020 21:10:07, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message42727/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message42727/topic5174/</guid>
			<pubDate>Sun, 15 Mar 2020 21:10:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message42726/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			кажется дошло до меня (1 Создает новый поток, толкает его в стек и возвращает указатель на lua_State, который представляет этот новый поток.) уже повод призадуматься буду углубляться в знания значит Спасибо) <br />
			<i>15.03.2020 21:04:47, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message42726/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message42726/topic5174/</guid>
			<pubDate>Sun, 15 Mar 2020 21:04:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message42725/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_8t7JEqVM" href="/user/9506/" bx-tooltip-user-id="9506">Алексей</a> написал:<br />
====code====
<pre>static int forLua_runMAIN1(lua_State* L)
{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;lua_State* L1 = lua_newthread(L);
&nbsp;&nbsp;&nbsp;&nbsp;lua_getglobal(L1, "main1");
&nbsp;&nbsp;&nbsp;&nbsp;lua_pcall(L1, 0, 0, 0);&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;return (0); 
}</pre>
=============
<br />=============<br />А теперь объясните, пожалуйста, словами, что в этой функции происходит, построчно. То есть что <I>как вы думаете</I> происходит. <br />
			<i>15.03.2020 19:21:09, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message42725/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message42725/topic5174/</guid>
			<pubDate>Sun, 15 Mar 2020 19:21:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message42724/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_hv4QCKh6" href="/user/9506/" bx-tooltip-user-id="9506">Алексей</a> написал:<br />в с++ я не силен познакомился в первые ну хорошо попробуем так 
====code====
<pre>&nbsp;&nbsp;static int forLua_runMAIN1(lua_State *&nbsp;&nbsp;L)
{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;lua_State *&nbsp;&nbsp;L1&nbsp;&nbsp;=&nbsp;&nbsp;lua_newthread(L);
&nbsp;&nbsp;&nbsp;&nbsp;lua_getglobal(L1,&nbsp;&nbsp;"main1" );
&nbsp;&nbsp;&nbsp;&nbsp;lua_pcall(L1,&nbsp;&nbsp;0 ,&nbsp;&nbsp;0 ,&nbsp;&nbsp;0 );&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp;&nbsp;( 0 ); 
}
&nbsp;&nbsp;</pre>
=============
 &nbsp;получилось? это в 32 бит версии могло такое прокатить &nbsp; <br />=============<br />и это я отбросил все условия предположил что main у меня в бесконечном цикле к примеру а в main1 функции скрипта стоит одна строка message(&quot;не получается&quot;) &nbsp;и все равно вы ее не запустите с t1 <br />
			<i>15.03.2020 18:47:03, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message42724/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message42724/topic5174/</guid>
			<pubDate>Sun, 15 Mar 2020 18:47:03 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message42723/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			в с++ я не силен познакомился в первые ну хорошо попробуем так
====code====
<pre>static int forLua_runMAIN1(lua_State* L)
{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;lua_State* L1 = lua_newthread(L);
&nbsp;&nbsp;&nbsp;&nbsp;lua_getglobal(L1, "main1");
&nbsp;&nbsp;&nbsp;&nbsp;lua_pcall(L1, 0, 0, 0);&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;return (0); 
}
</pre>
=============
<p>получилось? это в 32 бит версии могло такое прокатить</p><p></p> <br />
			<i>15.03.2020 18:28:09, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message42723/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message42723/topic5174/</guid>
			<pubDate>Sun, 15 Mar 2020 18:28:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message42721/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Если задачей было сократить поголовье сишников, то задача решена успешно, половину свезли в дурку, вторую в кардиологию. Код у вас &quot;не всегда находит нужную функцию&quot;, потому что никакой синхронизации нет, эти ваши while это мертвому припарка. В частности, пока вы в своем while ждете чудес, основной поток мог уже вообще завершиться, не находите? Квик ваши луа-конструкции при этом зачистит, а нативный поток так и останется тарахтеть в фоне до второго пришествия, точнее, пока не случится access violation и обвалит весь квик. По идее, надо lua_newthread вызвать в главном потоке, заполнить ему стек чем вам там нужно, и уже потом отдать созданный стек новому сишному потоку. И в основном потоке перед завершением (основного потока) дожидаться всех вторичных, а не просто detach() и живи как хочешь. Затем, вы делаете lua_xmove в цикле, который выполнится неизвестно сколько раз. Сколько значений вы выдернули в итоге из основного стека в новый? При этом основной поток продолжает работать параллельно и что-то там пихает в свой стек, а вы у него из-под носа это выдергиваете. И т.д. и т.п. <br />
			<i>15.03.2020 15:31:26, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message42721/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message42721/topic5174/</guid>
			<pubDate>Sun, 15 Mar 2020 15:31:26 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>quik 64 вызов функции lua  из dll c++</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message42719/topic5174/">quik 64 вызов функции lua  из dll c++</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В c++ я не силен поэтому ищу помощь.пытаюсь выполнить функцию из нового потока &quot;lua_State* L1 = lua_newthread(L);&quot; если раньше &nbsp;код &quot;32 dit версии quik&quot;<br />работал почти безупречно
====code====
<pre>&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;lua_State* L1 = lua_newthread(L);
&nbsp;&nbsp;&nbsp;&nbsp;lua_gc(L1, LUA_GCSTEP, 100); // выполняет постепенный этап сбора мусора
&nbsp;&nbsp;&nbsp;&nbsp;lua_pushstring(L1, "main1");//Находит в стеке Lua функцию по ее названию и помещает ее наверх стека
&nbsp;&nbsp;&nbsp;&nbsp;lua_gettable(L1, LUA_GLOBALSINDEX);
&nbsp;&nbsp;&nbsp;&nbsp;lua_pcall(L1, 0, 0, 0);
</pre>
=============
то 64bit версии я уже так сделать не могу
====code====
<pre>void newpotok(lua_State* L)
{
&nbsp;&nbsp;&nbsp;while (lua_isfunction(L, 1) != 1)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lua_getglobal(L, "main1"); Sleep(100); // ТУТ ЦИКЛ ТК НЕ ВСЕГДА НАХОДИТ НУЖНУЮ ФУНКЦИЮ ПРАВДА В ЭТОМ СОСТОЯНИИ ФУНКЦИЯ РАБОТАЕТ
&nbsp;&nbsp;&nbsp;}


&nbsp;&nbsp;&nbsp;lua_State* L1 = lua_newthread(L);
&nbsp;&nbsp;&nbsp;lua_settop(L1, 0);// уст кол-во элементов в стеке. 0 - очистить стек.

&nbsp;&nbsp;&nbsp;while (lua_isfunction(L1, 1) != 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lua_xmove(L, L1, 1);); ТУТ МЕНЯЛ ЗНАЧЕНИЯ МЕСТАМИ НИ ЧЕГО ПЕРЕДАЧА ФУНКЦИИ ДРУГОМУ ПОТОКУ
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lua_getglobal(L1, "main1"); Sleep(100); // 
&nbsp;&nbsp;&nbsp;}

 &nbsp;&nbsp;&nbsp;lua_pcall(L1, 0, 0, 0);&nbsp;&nbsp;//////////// НЕ ПОЛУЧАЕТСЯ ВЫПОЛНИТЬ ////////////////////////////////////////////////////////////////////////
&nbsp;&nbsp;&nbsp;

};

static int forLua_runMAIN1(lua_State* L)
{
&nbsp;&nbsp;&nbsp;std::thread thr(newpotok, L); //Запускает выполнение функции MyCallback() в отдельном потоке
&nbsp;&nbsp;&nbsp;thr.detach(); //Отсоединяет созданный поток от основного, делая его "фоновым"
&nbsp;&nbsp;&nbsp;return (0); //Завершает работу функции forLua_StartCallback, при этом функция MyCallback продолжает работать в отдельном потоке
}
</pre>
============= <br />
			<i>15.03.2020 14:45:49, Алексей.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message42719/topic5174/</link>
			<guid>http://forum.quik.ru/messages/forum10/message42719/topic5174/</guid>
			<pubDate>Sun, 15 Mar 2020 14:45:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
