<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[QUIK -> DDE &mdash; Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
	<link rel="self" href="https://quik2dde.ru/extern.php?action=feed&amp;tid=17&amp;type=atom" />
	<updated>2022-12-27T11:43:25Z</updated>
	<generator>PunBB</generator>
	<id>https://quik2dde.ru/viewtopic.php?id=17</id>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=4071#p4071" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-12-27T11:43:25Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=4071#p4071</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=4070#p4070" />
			<content type="html"><![CDATA[<p>Swerg, действительно, если использовать такой цикл - &quot;for k,v in pairs(t) do...&quot;, то размер таблицы знать необязательно.</p><p>Но если элементу таблицы присвоить nil, то освобождается ли память, которую он занимал? Не произойдёт ли утечки памяти?<br />Я полагал, что это как раз и можно определить функцией #.</p>]]></content>
			<author>
				<name><![CDATA[igor]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3369</uri>
			</author>
			<updated>2022-12-27T11:23:05Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=4070#p4070</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=4067#p4067" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>igor пишет:</cite><blockquote><p>Но тогда непонятно, как же определять длину массива. <br />Получается только с помощью цикла...</p></blockquote></div><p>Да, других вариантов нет.</p><p>Как вариант можно подумать в самом ли деле вам требуется знать размер таблицы? Поделитесь поподробнее задачей, может там можно обойтись без определения размера таблицы.</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-12-25T11:43:11Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=4067#p4067</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=4064#p4064" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[igor]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3369</uri>
			</author>
			<updated>2022-12-23T19:05:17Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=4064#p4064</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=4063#p4063" />
			<content type="html"><![CDATA[<p>Вообще никогда не используйте # !!!<br />Это полная шляпа.<br />Он дает валидные результаты только в том случае, если вы используете Lua-таблицы как массивы с непрерывными числовыми индексами. Всё !!</p><p>см. [url]https://www.lua.org/pil/19.1.html[/url]<br />(здесь # эквивалент table.getn)</p>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-12-23T13:25:32Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=4063#p4063</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=4062#p4062" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[igor]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3369</uri>
			</author>
			<updated>2022-12-23T11:59:13Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=4062#p4062</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=4060#p4060" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[swerg]]></name>
				<uri>https://quik2dde.ru/profile.php?id=78</uri>
			</author>
			<updated>2022-12-23T08:18:18Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=4060#p4060</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=4059#p4059" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[igor]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3369</uri>
			</author>
			<updated>2022-12-23T07:54:07Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=4059#p4059</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3990#p3990" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>toxa пишет:</cite><blockquote><p>с библиотекой идут примеры.</p></blockquote></div><p> я не про вашу библиотеку, а про потоки. как можно пробудить поток.</p>]]></content>
			<author>
				<name><![CDATA[osr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3378</uri>
			</author>
			<updated>2022-11-27T16:29:37Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3990#p3990</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3984#p3984" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[toxa]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3172</uri>
			</author>
			<updated>2022-11-26T11:44:05Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3984#p3984</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3980#p3980" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[osr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3378</uri>
			</author>
			<updated>2022-11-24T04:27:16Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3980#p3980</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3979#p3979" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2022-11-23T13:42:01Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3979#p3979</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3977#p3977" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[osr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3378</uri>
			</author>
			<updated>2022-11-23T13:01:59Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3977#p3977</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3972#p3972" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[kalikazandr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=208</uri>
			</author>
			<updated>2022-11-23T06:15:25Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3972#p3972</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Основы программирования LUA в QUIK (QLUA): обсуждение]]></title>
			<link rel="alternate" href="https://quik2dde.ru/viewtopic.php?pid=3971#p3971" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[osr]]></name>
				<uri>https://quik2dde.ru/profile.php?id=3378</uri>
			</author>
			<updated>2022-11-22T15:43:54Z</updated>
			<id>https://quik2dde.ru/viewtopic.php?pid=3971#p3971</id>
		</entry>
</feed>
