Плагин lists.spf [15/08/2013 21:40]

Обсуждение программ nnCron и nnCron LITE

Re: Плагин lists.spf [15/08/2013 21:40]

Postby dothen » Mon, 08 Feb 2016, 23:58

Замечание!
Вот задача, здесь видно что к любому узлу дерева есть доступ из любой ветви,
а не только из той на которой этот узел расположен.

Code: Select all
#( task_test_List
NoActive
0 VALUE node0
0 VALUE node1
0 VALUE node2

LIST: Tree      \ Дерево

: Str2Lst ( a u-- ) \ строку в список
    STRING-LIST
    -ROT
    FOR-LINES
           DUP FOUND-LINE ROT LIST!
    ;FOR-LINES
    Tree! \ Добавляем список к дереву.
;
Action:
    S" aaa%CRLF%bbb%CRLF%ccc" EVAL-SUBST Str2Lst
    S" AAA%CRLF%BBB%CRLF%CCC" EVAL-SUBST Str2Lst
    S" Aaa%CRLF%Bbb%CRLF%Ccc" EVAL-SUBST Str2Lst

    0 Tree#@ LIST( NODE@ TYPE SPACE NODE TO node0 )LIST CR \ В переменной остаётся адрес последнего узла,
    1 Tree#@ LIST( NODE@ TYPE SPACE NODE TO node1 )LIST CR \ но это сейчас не важно.
    2 Tree#@ LIST( NODE@ TYPE SPACE NODE TO node2 )LIST CR CR
\ Пока всё нормально.

    node0 0 Tree#@ NODE>@ TYPE SPACE \ Узел node0 должен быть только на одной ветке,
    node0 1 Tree#@ NODE>@ TYPE SPACE \ а он "есть" на всех ветках
    node0 2 Tree#@ NODE>@ TYPE SPACE CR CR

    node0 0 Tree#@ NODE>@ TYPE SPACE \ и наоборот
    node1 0 Tree#@ NODE>@ TYPE SPACE
    node2 0 Tree#@ NODE>@ TYPE SPACE
\ В общем к любому узлу дерева есть доступ из любой ветви,
\ а не только из той на которой этот узел расположен.
)#
dothen
 
Posts: 184
Joined: Mon, 16 Mar 2015, 04:58

Re: Плагин lists.spf [15/08/2013 21:40]

Postby VoidVolker » Tue, 09 Feb 2016, 01:40

dothen wrote:любому узлу дерева есть доступ из любой ветви, а не только из той на которой этот узел расположен.

Эмм... А что это значит? Каких-либо серьезных ошибок в коде не вижу, кроме возможной коллизии извлечения значения узла методом из списка, в котором он не находится (но если списки одного типа — то это не проблема) — результат работы кода вполне корректен.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин lists.spf [15/08/2013 21:40]

Postby dothen » Tue, 09 Feb 2016, 01:55

Ещё такой вопрос, глобальные динамические списки уничтожаются при завершении задачи?
dothen
 
Posts: 184
Joined: Mon, 16 Mar 2015, 04:58

Re: Плагин lists.spf [15/08/2013 21:40]

Postby VoidVolker » Tue, 09 Feb 2016, 02:22

dothen wrote:Ещё такой вопрос, глобальные динамические списки уничтожаются при завершении задачи?

Нет, они глобальные для всего процесса и доступ к ним имеется у всех потоков внутри процесса. Поэтому существует только два способа освобождения занятой глобальной памяти: вручную или завершением всего процесса.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин lists.spf [15/08/2013 21:40]

Postby dothen » Fri, 22 Apr 2016, 23:26

Пример:
Создаём список, запускаем задачу и заполняем список.
Code: Select all
#( task-test-list
NoActive
GLOBAL-LIST: GlobalList1
Action:
100 0 DO I GlobalList1! LOOP
)#

Теперь редактируем задачу.
Например так:
Code: Select all
#( task-test-list
NoActive
GLOBAL-LIST: GlobalList2
Action:
100 0 DO I GlobalList2! LOOP
)#
И перечитываем кронтабы.

Первого списка как-бы больше нет, т.е. нет заголовка списка.

Вопрос: Глобальная память выделенная для первого списка останется занятой до закрытия nnCron ?

Или же редактировали другую задачу, перечитали кронтабы, и теперь при выполнении этой задачи
будет выделена новая глобальная память для этого же списка?
И так каждый раз при перечитывании кронтабов?
dothen
 
Posts: 184
Joined: Mon, 16 Mar 2015, 04:58

Re: Плагин lists.spf [15/08/2013 21:40]

Postby VoidVolker » Sat, 23 Apr 2016, 12:47

Да, блок глобально выделенной памяти остается занятым до закрытия ннкрона или до её освобождения. В конкретно данном случае после редактирования кронтаба произойдет следующее: ннкрон очистит кодофайл и весь скомпилированный код из кронтабов, в т.ч. и заголовок списка, но т.к. в первой задаче список не был освобожден - то глобальная память, выделенная на элементы списка останется занятой и её уже никак не освободить, кроме как перезапуском ннкрона. Память для элементов списка выделяется динамически - в процессе добавления элементов в список.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Плагин lists.spf [15/08/2013 21:40]

Postby dothen » Sat, 23 Apr 2016, 13:04

А освободить глобальную память можно из любого потока, или только из потока в котором выделяли память?
dothen
 
Posts: 184
Joined: Mon, 16 Mar 2015, 04:58

Re: Плагин lists.spf [15/08/2013 21:40]

Postby VoidVolker » Sat, 23 Apr 2016, 17:15

Из любого.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Previous

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: No registered users and 1 guest

cron