<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Как сделать выборку по свечам?]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=311&amp;type=atom" />
	<updated>2020-03-07T20:25:08Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=311</id>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2636#p2636" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-07T20:25:08Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2636#p2636</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2617#p2617" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>swerg, и, кстати, раз уж мы говорим про перекореженную lua-машину квика, то можно попробовать такой концепт</p></blockquote></div><p>я попробовал, и оно вполне себе работает. если интересно, могу выложить на гитхаб.</p>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-05T20:28:26Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2617#p2617</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2611#p2611" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2020-03-03T11:46:20Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2611#p2611</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2609#p2609" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>RRR пишет:</cite><blockquote><p>Ясно одно, что стоит хорошенько разобраться прежде чем удастся что-то написать...</p></blockquote></div><p>[url]https://quik2dde.ru/viewtopic.php?id=16[/url]</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2020-03-03T11:27:23Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2609#p2609</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2607#p2607" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>то main() из скрипта будет запущена, но dofile() не выйдет</p></blockquote></div><p>Ясно одно, что стоит хорошенько разобраться прежде чем удастся что-то написать...</p>]]></content>
			<author>
				<name><![CDATA[RRR]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3102</uri>
			</author>
			<updated>2020-03-03T11:07:12Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2607#p2607</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2606#p2606" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-03T11:00:27Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2606#p2606</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2605#p2605" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[RRR]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3102</uri>
			</author>
			<updated>2020-03-03T10:46:34Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2605#p2605</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2603#p2603" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-03T10:23:13Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2603#p2603</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2602#p2602" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-03T10:13:10Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2602#p2602</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2601#p2601" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>swerg пишет:</cite><blockquote><p>Но в qlua есть main()</p></blockquote></div><p>Да, я как раз про это и говорил.<br />Я конечно не спец в программировании, пока только учусь. <br />По этому буду разбираться дальше.<br />Из всей ветки я понял что нет никакого резона писать в отдельную main().</p>]]></content>
			<author>
				<name><![CDATA[RRR]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3102</uri>
			</author>
			<updated>2020-03-03T09:34:12Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2601#p2601</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2600#p2600" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-03T09:31:37Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2600#p2600</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2599#p2599" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2020-03-03T09:28:40Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2599#p2599</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2598#p2598" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>Нельзя, потому, что в lua нет многопоточности.</p></blockquote></div><p>Но в qlua есть main(), выполняющаяся в отдельном потоке.<br />Или вы что-то другие имели ввиду?</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2020-03-03T09:19:50Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2598#p2598</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2597#p2597" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2020-03-03T09:18:11Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2597#p2597</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Как сделать выборку по свечам?]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=2596#p2596" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[RRR]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3102</uri>
			</author>
			<updated>2020-03-03T09:11:02Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=2596#p2596</id>
		</entry>
</feed>
