<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[QUIK -> DDE &mdash; Как сделать выборку по свечам?]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=311</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=311&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Как сделать выборку по свечам?».]]></description>
		<lastBuildDate>Sat, 07 Mar 2020 20:25:08 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2636#p2636</link>
			<description><![CDATA[<p>вот: [url]https://github.com/untoxa/lua_threads[/url] как proof-of-concept интересно, но пользоваться этим лучше не надо. позволяет делать всякое такое:<br /></p><div class="codebox"><pre><code>tlib = require &quot;lua_threads&quot;
                         
function threadfunc2(astr)
    message(astr, 1);
    while not tlib.IsCurrentThreadTerminated() do
        --
    end
    message(&#039;thread2 exit&#039;)
end
 
function threadfunc(astr)
    thread2 = tlib.CreateThread(threadfunc2, &quot;hello, world from thread2&quot;)
    message(astr, 1);
    while true do
        -- 
    end
end

function main()
    message(&quot;hello from main() from thread0&quot;, 1)
    thread1 = tlib.CreateThread(threadfunc, &quot;hello, world from thread1&quot;)
    local i = 0
    while not GlobalExit() do
        i = i + 1
        if i == 10000000 then
            message(&quot;force free thread1&quot;, 1)
            thread1 = nil
            collectgarbage()           
            message(&quot;free thread1 done&quot;, 1)
        end 
    end
    thread1 = nil
    thread2 = nil
    collectgarbage()
    message(&#039;main() exit&#039;, 1)
end</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Sat, 07 Mar 2020 20:25:08 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2636#p2636</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2617#p2617</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>swerg, и, кстати, раз уж мы говорим про перекореженную lua-машину квика, то можно попробовать такой концепт</p></blockquote></div><p>я попробовал, и оно вполне себе работает. если интересно, могу выложить на гитхаб.</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Thu, 05 Mar 2020 20:28:26 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2617#p2617</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2611#p2611</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>[url]https://quik2dde.ru/viewtopic.php?id=16[/url]</p></blockquote></div><p>10 из 10</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Tue, 03 Mar 2020 11:46:20 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2611#p2611</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2609#p2609</link>
			<description><![CDATA[<div class="quotebox"><cite>RRR пишет:</cite><blockquote><p>Ясно одно, что стоит хорошенько разобраться прежде чем удастся что-то написать...</p></blockquote></div><p>[url]https://quik2dde.ru/viewtopic.php?id=16[/url]</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 03 Mar 2020 11:27:23 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2609#p2609</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2607#p2607</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>то main() из скрипта будет запущена, но dofile() не выйдет</p></blockquote></div><p>Ясно одно, что стоит хорошенько разобраться прежде чем удастся что-то написать...</p>]]></description>
			<author><![CDATA[null@example.com (RRR)]]></author>
			<pubDate>Tue, 03 Mar 2020 11:07:12 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2607#p2607</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2606#p2606</link>
			<description><![CDATA[<div class="quotebox"><cite>RRR пишет:</cite><blockquote><p>то уже не смогу в dofile(getScriptPath() .. &quot;\\func_tion.lua&quot;) указать Body(), в которм будет другая main().?</p></blockquote></div><p>dofile() не запускает функций. он сам запускает скрипт. если в вашем скрипте func_tion.lua написано:<br /></p><div class="codebox"><pre><code>function main() message(&quot;hello, world&quot;, 1); end</code></pre></div><p>то dofile() не запустит main() внутри этого скрипта, надпись &quot;hello, world&quot; не появится.<br />если вы напишите скрипте:<br /></p><div class="codebox"><pre><code>function main() message(&quot;hello, world&quot;, 1); end
main()</code></pre></div><p>то main() из скрипта будет запущена, но dofile() не выйдет до тех пор, пока не отработает main() внутри скрипта func_tion.lua. глобальный main() переопределится, но никто об этом не узнает, так как основной main(), который запустил, собственно, quik уже исполняется. если мы даже напишем в какой-нибудь ветке алгоритма main = nil и, тем самым, удалим функцию main(), это ни на что не повлияет. в отличие от предыдущего моего примера, так как там переопределение функции main() происходит до вызова main() квиком.</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Tue, 03 Mar 2020 11:00:27 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2606#p2606</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2605#p2605</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>в одном квиковом скрипте, который вы запускаете из окошка &quot;доступные скрипты&quot;</p></blockquote></div><p>Т.е. если я запущу в коде <br /></p><div class="codebox"><pre><code>function main()    
   while  (is_run==true) do
   Body()         
   end 
end</code></pre></div><p>то уже не смогу в </p><div class="codebox"><pre><code>dofile(getScriptPath() .. &quot;\\func_tion.lua&quot;)</code></pre></div><p> указать Body(), в которм будет другая main().?</p>]]></description>
			<author><![CDATA[null@example.com (RRR)]]></author>
			<pubDate>Tue, 03 Mar 2020 10:46:34 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2605#p2605</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2603#p2603</link>
			<description><![CDATA[<div class="quotebox"><cite>RRR пишет:</cite><blockquote><p>Из всей ветки я понял что нет никакого резона писать в отдельную main().</p></blockquote></div><p>в одном квиковом скрипте, который вы запускаете из окошка &quot;доступные скрипты&quot; может быть только одна main(). точнее, можете написать 10 штук, но каждая следующая переопределит предыдущую:<br /></p><div class="codebox"><pre><code>function main() message(&quot;main1&quot;, 1); end
function main() message(&quot;main2&quot;, 1); end</code></pre></div><p>сработает только &quot;main2&quot;. </p><p>через квиковое окошко &quot;доступные скрипты&quot; можно запустить 10 скриптов, каждый со своим main(), они будут выполняться параллельно, но нужна коммуникация между скриптами, так как они будут исполняться в разных lua-машинах.</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Tue, 03 Mar 2020 10:23:13 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2603#p2603</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2602#p2602</link>
			<description><![CDATA[<p>swerg, и, кстати, раз уж мы говорим про перекореженную lua-машину квика, то можно попробовать такой концепт: из либы создавать стек при помощи lua_newthread() и в этом стеке можно запустить некую lua-функцию в реально отдельном треде который создать при помощи CreateThread(). так как в квике колбэки реально исполняются не в том же треде, что и main(), следовательно защита все же добавлена в квиковую lua-машину. остается только отловить момент завершения скрипта (можно прям в lua через&nbsp; __gc() той таблицы, которую создает библиотека, например) и оттуда убивать эти треды, чтобы все не повалилось со страшным грохотом, когда квик прибьет свою lua-машину. есть только одна проблема: нужно добиться того, чтобы в куче не осталось ничего в какой бы момент мы не делали terminatethread(), что довольно проблематично. один из вариантов решения: отладка. вешаем отладочный хук lua_sethook() срабатывающий через count инструкций. в сработавшем хуке мы смотрим, &quot;наш&quot; ли threadid, если &quot;наш&quot;, и нужно выходить, то можно сказать что-то вроде lua_pushstring(L, &quot;Abort requested!&quot;); lua_error(L); в хуке, где L - стейт полученный lua_newthread(). это приведет к вываливанию тредового скрипта из lua_pcall() и там дальше дело техники.</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Tue, 03 Mar 2020 10:13:10 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2602#p2602</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2601#p2601</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Но в qlua есть main()</p></blockquote></div><p>Да, я как раз про это и говорил.<br />Я конечно не спец в программировании, пока только учусь. <br />По этому буду разбираться дальше.<br />Из всей ветки я понял что нет никакого резона писать в отдельную main().</p>]]></description>
			<author><![CDATA[null@example.com (RRR)]]></author>
			<pubDate>Tue, 03 Mar 2020 09:34:12 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2601#p2601</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2600#p2600</link>
			<description><![CDATA[<div class="quotebox"><cite>RRR пишет:</cite><blockquote><p>Через&nbsp; &nbsp; dofile(getScriptPath() .. &quot;\\func_tion.lua&quot;) подключение в процессе&nbsp; файла, где будут&nbsp; происходить все вычисления. Или так нельзя?</p></blockquote></div><p>можно, только толку не будет. <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> ну, в смысле, параллельно ничего не будет выполняться. пока func_tion.lua не завершится - вы из dofile() не выйдете.</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Tue, 03 Mar 2020 09:31:37 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2600#p2600</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2599#p2599</link>
			<description><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Но в qlua есть main(), выполняющаяся в отдельном потоке.<br />Или вы что-то другие имели ввиду?</p></blockquote></div><p>ну вот мы зафигачили все в main(). а теперь хотим несколько вычислений &quot;распараллелить&quot; <strong>для ускорения</strong>. это не так просто, а на чистом lua - невозможно. корутины, которые есть в lua - это кооперативная многозадачность, все корутины выполняются в одном треде. <br />ps:кстати, интересно выяснить, повалится ли квик, если делать resume корутины из колбэков квика. 4 шанса из 5, что они забыли расставить там критические секции.</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Tue, 03 Mar 2020 09:28:40 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2599#p2599</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2598#p2598</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>Нельзя, потому, что в lua нет многопоточности.</p></blockquote></div><p>Но в qlua есть main(), выполняющаяся в отдельном потоке.<br />Или вы что-то другие имели ввиду?</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 03 Mar 2020 09:19:50 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2598#p2598</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2597#p2597</link>
			<description><![CDATA[<div class="quotebox"><cite>RRR пишет:</cite><blockquote><p>Через&nbsp; &nbsp; dofile(getScriptPath() .. &quot;\\func_tion.lua&quot;) подключение в процессе&nbsp; файла, где будут&nbsp; происходить все вычисления.</p></blockquote></div><p>Эти вычисления не будут выполняться &quot;отдельно&quot; в смысле в другом потоке.<br />По сути что в один скрипт всё вписать, что в другой подгружаемый файл вынести исходный код - кроме модульности это ничего не даст.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 03 Mar 2020 09:18:11 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2597#p2597</guid>
		</item>
		<item>
			<title><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=2596#p2596</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>Что вы подразумеваете под «отдельно»?</p></blockquote></div><p>Через&nbsp; &nbsp; dofile(getScriptPath() .. &quot;\\func_tion.lua&quot;) подключение в процессе&nbsp; файла, где будут&nbsp; происходить все вычисления.<br />Или так нельзя?</p>]]></description>
			<author><![CDATA[null@example.com (RRR)]]></author>
			<pubDate>Tue, 03 Mar 2020 09:11:02 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=2596#p2596</guid>
		</item>
	</channel>
</rss>
