<?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; Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
		<link>https://quik2dde.ru/viewtopic.php?id=17</link>
		<atom:link href="https://quik2dde.ru/extern.php?action=feed&amp;tid=17&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Основы программирования LUA в QUIK (QLUA): обсуждение».]]></description>
		<lastBuildDate>Tue, 27 Dec 2022 11:43:25 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4071#p4071</link>
			<description><![CDATA[<p><strong>igor</strong>,<br />на мой взгляд это какой-то бессмысленный и непрактичный вопрос.<br />Обещана автоматическая сборка мусора - значит она работает. Ну мы ж не на Си программируем в самом-то деле. Специально же даден нам скриптовый язык, чтобы мы не думали о памяти и её выделении / освобождении. Так я считаю.<br />Да и как # может сказать об освобождении памяти? про память говорит диспетчер задач Windows.</p><p>И да,<br /></p><div class="quotebox"><blockquote><p>Но если элементу таблицы присвоить nil,</p></blockquote></div><p>то, по справке - память освобождается. Так что всё в порядке, можно не поверять <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Tue, 27 Dec 2022 11:43:25 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4071#p4071</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4070#p4070</link>
			<description><![CDATA[<p>Swerg, действительно, если использовать такой цикл - &quot;for k,v in pairs(t) do...&quot;, то размер таблицы знать необязательно.</p><p>Но если элементу таблицы присвоить nil, то освобождается ли память, которую он занимал? Не произойдёт ли утечки памяти?<br />Я полагал, что это как раз и можно определить функцией #.</p>]]></description>
			<author><![CDATA[null@example.com (igor)]]></author>
			<pubDate>Tue, 27 Dec 2022 11:23:05 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4070#p4070</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4067#p4067</link>
			<description><![CDATA[<div class="quotebox"><cite>igor пишет:</cite><blockquote><p>Но тогда непонятно, как же определять длину массива. <br />Получается только с помощью цикла...</p></blockquote></div><p>Да, других вариантов нет.</p><p>Как вариант можно подумать в самом ли деле вам требуется знать размер таблицы? Поделитесь поподробнее задачей, может там можно обойтись без определения размера таблицы.</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Sun, 25 Dec 2022 11:43:11 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4067#p4067</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4064#p4064</link>
			<description><![CDATA[<p>Swerg, спасибо.<br />Действительно полезная информация.<br />Но тогда непонятно, как же определять длину массива. <br />Получается только с помощью цикла...<br />Что-то вроде:<br />local t = { a = 1, b = 2 }<br />n=0<br />for k,v in pairs(t) do<br />&nbsp; n=n+1<br />end</p>]]></description>
			<author><![CDATA[null@example.com (igor)]]></author>
			<pubDate>Fri, 23 Dec 2022 19:05:17 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4064#p4064</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4063#p4063</link>
			<description><![CDATA[<p>Вообще никогда не используйте # !!!<br />Это полная шляпа.<br />Он дает валидные результаты только в том случае, если вы используете Lua-таблицы как массивы с непрерывными числовыми индексами. Всё !!</p><p>см. [url]https://www.lua.org/pil/19.1.html[/url]<br />(здесь # эквивалент table.getn)</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Fri, 23 Dec 2022 13:25:32 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4063#p4063</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4062#p4062</link>
			<description><![CDATA[<p>Swerg, спасибо.<br />Получается, если я правильно понял, что если какому-нибудь элементу массива со строковым индексом присвоить nil, то этот элемент удаляется и освобождается память.</p><p>Я ради любопытства попробовал сделать то же самое с массивом с целочисленным индексом. Т.е. такой код:</p><p>aa={}; aa[1]=&#039;2&#039;; aa[2]=&#039;4&#039;; aa[3]=&#039;8&#039;<br />aa[2]=nil<br />message(tostring(#aa))</p><p>Результат всё равно 3. И непонятно, освобождается ли при этом память или нет. Я думал, что и с массивом со строковым индексом такая же ситуация.<br />Похоже массивы с целочисленным индексом и строковым индексом хранятся в памяти как-то по-разному...</p>]]></description>
			<author><![CDATA[null@example.com (igor)]]></author>
			<pubDate>Fri, 23 Dec 2022 11:59:13 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4062#p4062</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4060#p4060</link>
			<description><![CDATA[<p><strong>igor</strong>, используйте такую функцию:</p><div class="codebox"><pre><code>function table.removekey(table, key)
    local element = table[key]
    table[key] = nil
    return element
end</code></pre></div><p>Пример использования:<br /></p><div class="codebox"><pre><code>local t = { a = 1, b = 2 }

for k,v in pairs(t) do
  print(k, v)
end

print(&#039;---&#039;)

table.removekey(t, &#039;a&#039;)

for k,v in pairs(t) do
  print(k, v)
end</code></pre></div><p>выведет:</p><p>b&nbsp; &nbsp; 2<br />a&nbsp; &nbsp; 1<br />---<br />b&nbsp; &nbsp; 2</p>]]></description>
			<author><![CDATA[null@example.com (swerg)]]></author>
			<pubDate>Fri, 23 Dec 2022 08:18:18 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4060#p4060</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=4059#p4059</link>
			<description><![CDATA[<p>Здравствуйте.<br />У меня вопрос про функцию table.remove.<br />Если индекс массива имеет целочисленный тип, то она работает без проблем.<br />Т.е. результатом выполнения такого кода будет 2:</p><p>a={}; a[1]=&#039;2&#039;; a[2]=&#039;4&#039;; a[3]=&#039;8&#039;<br />table.remove(a, 2)<br />message(tostring(#a))</p><p>А вот если индекс массива имеет строковый тип, то table.remove не работает. Т.е. такой код выдаст ошибку:</p><p>a={}; a[&#039;1&#039;]=&#039;2&#039;; a[&#039;2&#039;]=&#039;4&#039;; a[&#039;3&#039;]=&#039;8&#039;<br />table.remove(a, &#039;2&#039;)</p><p>Как можно удалить элемент массива, если его индекс имеет строковый тип?</p>]]></description>
			<author><![CDATA[null@example.com (igor)]]></author>
			<pubDate>Fri, 23 Dec 2022 07:54:07 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=4059#p4059</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3990#p3990</link>
			<description><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>с библиотекой идут примеры.</p></blockquote></div><p> я не про вашу библиотеку, а про потоки. как можно пробудить поток.</p>]]></description>
			<author><![CDATA[null@example.com (osr)]]></author>
			<pubDate>Sun, 27 Nov 2022 16:29:37 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3990#p3990</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3984#p3984</link>
			<description><![CDATA[<div class="quotebox"><cite>osr пишет:</cite><blockquote><p>не могу сам разобраться <img src="https://quik2dde.ru/img/smilies/sad.png" width="15" height="15" alt="sad" /></p></blockquote></div><p>с библиотекой идут примеры. каждый пример демонстрирует ту или иную возможность. там где в моих примерах в цикле sleep() - он предназначен для того, чтобы пример не плодил сотни тысяч сообщений, в вашем торговом роботе этого может не быть.</p>]]></description>
			<author><![CDATA[null@example.com (toxa)]]></author>
			<pubDate>Sat, 26 Nov 2022 11:44:05 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3984#p3984</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3980#p3980</link>
			<description><![CDATA[<div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><p>не возможно, вас обманывают.</p></blockquote></div><p>для меня такое поведение потоков обычное дело. может это в lua не возможно.</p><div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><p>sleep(2000) стоит, что бы квиковские сообщения не убили вам терминал,</p></blockquote></div><p>да это я понимаю. моя задача конечно же не в том что бы сообщения выводить, а принимать торговые решения купить/ продать. </p><div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><p>Если ПК мощный, то sleep(1) вполне себе, но если это винда, то от 1 до 50 ms, ну потому что винде так хочется.</p></blockquote></div><p>у меня как раз ubuntu <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<author><![CDATA[null@example.com (osr)]]></author>
			<pubDate>Thu, 24 Nov 2022 04:27:16 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3980#p3980</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3979#p3979</link>
			<description><![CDATA[<div class="quotebox"><cite>osr пишет:</cite><blockquote><p>вот пример из какой то игры lua_thread.create_suspended(sh_event)<br />там можно создавать потоки и будить их.</p></blockquote></div><p>не возможно, вас обманывают.</p><div class="quotebox"><cite>osr пишет:</cite><blockquote><p>Ну в принципе если сделать в main&nbsp; маленькую задержку sleep(1), попробую пока&nbsp; так.<br />Спасибо!</p></blockquote></div><p>sleep(2000) стоит, что бы квиковские сообщения не убили вам терминал, <br />по этому events.message(&quot;TQBR_SBER&quot;) лучше отключить.<br />Событие вы можете увидеть раньше - в main, в соответствующей таблице квика, добавилась строка, изменился параметр и т.д.<br />Для этого нужно постоянно что-то мониторить и даже то, что нафик не нужно.<br />Другое дело, когда вы создаете себе событийную ленту по нужным вам изменениям и уже её обрабатываете.<br />Если ПК мощный, то sleep(1) вполне себе, но если это винда, то от 1 до 50 ms, ну потому что винде так хочется.</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Wed, 23 Nov 2022 13:42:01 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3979#p3979</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3977#p3977</link>
			<description><![CDATA[<div class="quotebox"><cite>kalikazandr пишет:</cite><blockquote><p>т.е. вы хотите, что бы некая функция, пихала main, со словами &quot;Вставай скотина - на посчитай..&quot;</p></blockquote></div><p>что то в это духе да! <img src="https://quik2dde.ru/img/smilies/smile.png" width="15" height="15" alt="smile" /> <br />ну я не знаю lua может ли он так. <br />видимо для этого должны были позаботится разработчики qlua <br />вот пример из какой то игры lua_thread.create_suspended(sh_event)<br />там можно создавать потоки и будить их. <br />Ну в принципе если сделать в main&nbsp; маленькую задержку sleep(1), попробую пока&nbsp; так.<br />Спасибо!</p>]]></description>
			<author><![CDATA[null@example.com (osr)]]></author>
			<pubDate>Wed, 23 Nov 2022 13:01:59 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3977#p3977</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3972#p3972</link>
			<description><![CDATA[<div class="quotebox"><cite>osr пишет:</cite><blockquote><p>не могу сам разобраться <img src="https://quik2dde.ru/img/smilies/sad.png" width="15" height="15" alt="sad" /> <br />но такого точно не должно быть</p></blockquote></div><p>т.е. вы хотите, что бы некая функция, пихала main, со словами &quot;Вставай скотина - на посчитай..&quot; <br />Так что-ли? Вы в каком то своем мире живете. Вас никто не заставляет пользоваться событиями, делайте как умеете, когда придёт понимание &quot;событие&quot; тогда будут другие вопросы, а не хотелки.<br />И да, поставьте sleep(1) - вижу, что вам нужно попробовать...</p>]]></description>
			<author><![CDATA[null@example.com (kalikazandr)]]></author>
			<pubDate>Wed, 23 Nov 2022 06:15:25 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3972#p3972</guid>
		</item>
		<item>
			<title><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link>https://quik2dde.ru/viewtopic.php?pid=3971#p3971</link>
			<description><![CDATA[<p>не могу сам разобраться <img src="https://quik2dde.ru/img/smilies/sad.png" width="15" height="15" alt="sad" /> <br />но такого точно не должно быть <br />function main()<br />&nbsp; &nbsp; while not exitflag do<br />&nbsp; &nbsp; &nbsp; &nbsp; events.message(&quot;TQBR_SBER&quot;)<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; sleep(2000)<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; sh_event()<br />&nbsp; &nbsp; end<br />end</p><p>зачем тогда события вообще нужны? я и сам могу через каждые 2с опрашивать таблицу. <br />нужно что бы событие само будила спящий поток и передавала ему управление <br />например функции sh_event()</p><p>я нашел что то вроде lua_thread.create_suspended(sh_event)<br />но это почему то не работает :<br /> attempt to index a nil value (global &#039;lua_thread&#039;)</p>]]></description>
			<author><![CDATA[null@example.com (osr)]]></author>
			<pubDate>Tue, 22 Nov 2022 15:43:54 +0000</pubDate>
			<guid>https://quik2dde.ru/viewtopic.php?pid=3971#p3971</guid>
		</item>
	</channel>
</rss>
