Обсуждение программ nnCron и nnCron LITE
by 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: 187
- Joined: Mon, 16 Mar 2015, 04:58
by VoidVolker » Tue, 09 Feb 2016, 01:40
dothen wrote:любому узлу дерева есть доступ из любой ветви, а не только из той на которой этот узел расположен.
Эмм... А что это значит? Каких-либо серьезных ошибок в коде не вижу, кроме возможной коллизии извлечения значения узла методом из списка, в котором он не находится (но если списки одного типа — то это не проблема) — результат работы кода вполне корректен.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by dothen » Tue, 09 Feb 2016, 01:55
Ещё такой вопрос, глобальные динамические списки уничтожаются при завершении задачи?
-
dothen
-
- Posts: 187
- Joined: Mon, 16 Mar 2015, 04:58
by VoidVolker » Tue, 09 Feb 2016, 02:22
dothen wrote:Ещё такой вопрос, глобальные динамические списки уничтожаются при завершении задачи?
Нет, они глобальные для всего процесса и доступ к ним имеется у всех потоков внутри процесса. Поэтому существует только два способа освобождения занятой глобальной памяти: вручную или завершением всего процесса.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by 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: 187
- Joined: Mon, 16 Mar 2015, 04:58
by VoidVolker » Sat, 23 Apr 2016, 12:47
Да, блок глобально выделенной памяти остается занятым до закрытия ннкрона или до её освобождения. В конкретно данном случае после редактирования кронтаба произойдет следующее: ннкрон очистит кодофайл и весь скомпилированный код из кронтабов, в т.ч. и заголовок списка, но т.к. в первой задаче список не был освобожден - то глобальная память, выделенная на элементы списка останется занятой и её уже никак не освободить, кроме как перезапуском ннкрона. Память для элементов списка выделяется динамически - в процессе добавления элементов в список.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by dothen » Sat, 23 Apr 2016, 13:04
А освободить глобальную память можно из любого потока, или только из потока в котором выделяли память?
-
dothen
-
- Posts: 187
- Joined: Mon, 16 Mar 2015, 04:58
by VoidVolker » Sat, 23 Apr 2016, 17:15
Из любого.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
Return to nnCron forum (Russian)
Who is online
Users browsing this forum: No registered users and 4 guests
|
|