Обсуждение программ nnCron и nnCron LITE
by VoidVolker » Wed, 30 Jun 2010, 14:33
Ап! Исправлена ошибка, из-за которой невозможно было использовать в режиме интерпретации две и более строки подряд. Теперь слова sliteral, cliteral и zliteral в режиме интерпретации помещают новую строку по старому адресу - т.е. меняют исходную строку.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by VoidVolker » Mon, 12 Dec 2011, 22:54
Ап! Добавлен сборщик мусора. Теперь можно не беспокоится за утечки памяти из-за создания временных строк во время работы плагина. После использования полученной строки, когда она уже не нужна, её тоже можно освободить словом LAS-FREE.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by VoidVolker » Wed, 14 Dec 2011, 17:48
Ап! Добавил сборщик мусора для слова S+. Теперь можно использовать сложение строк неограниченное количество раз без утечек памяти и в долго работающих задачах. TRASH( ( -- ) Начать сбор мусора. Все строки, созданные словом S+ будут попадать в корзину. Для ручного добавления или извлечения адресов используйте слова TRASH! и TRASH@ (только адреса, выделенные словом ALLOCATE) )TRASH ( -- ) Закончить сбор мусора. Все адреса, находящиеся в корзине будут освобождены. Слово S+ больше не будет добавлять адреса в корзину. TRASH! ( addr -- ) Отправить адрес со стека в корзину. Только между слов TRASH( и )TRASHTRASH@ ( -- addr ) Получить адрес из корзины. Только между слов TRASH( и )TRASHИспользовать примерно так: - Code: Select all
TRASH( ... S+ S+ S+ ... 100000 ALLOCATE THROW DUP TRASH! ... )TRASH
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by VoidVolker » Sat, 14 Jan 2012, 10:34
Ап! Исправлена ошибка, приводящая при определенных условиях к искажению созданных строк. Убедительная просьба всем обновить плагин во избежание ошибок в данных. Приношу свои извинения.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by Morituruz » Sat, 14 Jan 2012, 15:01
О, дата в названии, добавлю тему в check.ini  . Я вот насчёт мусора не понял, его всегда нужно использовать, когда пользуешься S+? TRASH( " 1" " 2" " 3" S+ S+ mystring PLACE )TRASH И ещё слово LAS-FREE кроме как в шапке нигде не нашёл. Хочу примеров вобщем.
-

Morituruz
-
- Posts: 728
- Joined: Sun, 14 Oct 2007, 01:51
by VoidVolker » Sat, 14 Jan 2012, 16:21
Ап! Дата в заголовке тему удобна? Тогда и в остальных темах про плагины сделаю так. Кстати, дату можно получить и из кода по строке Дата:. Moriturus wrote:Я вот насчёт мусора не понял, его всегда нужно использовать, когда пользуешься S+? - Code: Select all
TRASH( " 1" " 2" " 3" S+ S+ mystring PLACE )TRASH
Не обязательно. Это для предотвращения утечек памяти. Актуально только для задач, выполняющихся длительное время и использующих сложение строк либо использующих сложение строк очень интенсивно. Так же полезно для ПК с маленьким объемом ОЗУ. Единственный минус - для этого используются дополнительные процессорные мощности, а с учетом современных скоростей и объема строк этим можно пренебречь. Пример применения слова LAS-FREE: - Code: Select all
" Верхнее окно: %ACTIVE-WINDOW%|nЗаголовок окна: %USERNAME%" TYPE CR LAS-FREE
В данном случае строка разворачивается в следующий код: - Code: Select all
TRASH( S" Верхнее окно: " ACTIVE-WINDOW S+ CRLF S+ S" Заголовок окна: " S+ USERNAME S+ )ATRASH
Строки, созданные первым, вторым и третьим S+ были освобождены, а вот адрес строки последнего S+ был занесен в переменную. И слово LAS-FREE как раз этот адрес и освобождает.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by VoidVolker » Sat, 14 Jan 2012, 16:54
Ап! Исправлена опечатка.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by Morituruz » Tue, 17 Jan 2012, 20:43
Замена этого: - Code: Select all
bln COUNT S" /%host_name%.+/i" EVAL-SUBST RE-ALL bln COUNT $0 S" %host_name%: %ping_time% ms, %ping_loss% %PERCENT%" EVAL-SUBST StringReplace bln PLACE ;RE-ALL
на это: - Code: Select all
bln COUNT " /%host_name%.+/i" RE-ALL bln COUNT $0 " %host_name%: %ping_time% ms, %ping_loss% |p" StringReplace bln PLACE ;RE-ALL
почему-то не работает.
-

Morituruz
-
- Posts: 728
- Joined: Sun, 14 Oct 2007, 01:51
by VoidVolker » Tue, 17 Jan 2012, 22:12
А что выдают слова host_name, ping_time и ping_loss? Это должны быть только строки. Советую проверить, что именно выдает строка: - Code: Select all
" %host_name%: %ping_time% ms, %ping_loss% |p"
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by Morituruz » Tue, 17 Jan 2012, 22:17
Вы как всегда правы, они возвращают числа, а надо строки 
-

Morituruz
-
- Posts: 728
- Joined: Sun, 14 Oct 2007, 01:51
by VoidVolker » Tue, 17 Jan 2012, 22:39
Да, это единственное отличие от EVAl-SUBST в работе с подстроками. В описание это есть.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by SphinxST » Sun, 05 Feb 2012, 21:45
Посмотри плс, является ли следующее проблемой в автостроках. Заголовок задачи: - Code: Select all
<% : OFFICE_LAPTOP_NAME " SEMENT04" ; %>
<% : IS_CURRENT_PC? \ ( a u -- ) " COMPUTERNAME" ENV COMPARE 0= ; %>
<% : PRIVATE_DIR " C:\!ST" ; : DESKTOP_PRIV_DIR " z:\!ST" ; %>
#( OFFICE_LAPTOP_Backup_Laptop_To_Desktop RunMissed LoadProfile Time: 0 7 * * 2 * STRING-LIST: bld_syncList Rule: " outlook.exe" PROC-EXIST? NOT " %PRIVATE_DIR%" EXIST? AND " %DESKTOP_PRIV_DIR% EXIST? AND " %OFFICE_LAPTOP_NAME%" IS_CURRENT_PC? AND Action:
Крон выдает ошибку - Code: Select all
20:41:04 3080 ST OFFICE_LAPTOP_Backup_Laptop_To_Desktop: Rule: stack error.
При комментировании RULE в правиле выше ошибка пропадает.
-
SphinxST
-
- Posts: 18
- Joined: Thu, 17 Nov 2011, 12:27
by Morituruz » Sun, 05 Feb 2012, 22:04
SphinxST wrote: " outlook.exe" PROC-EXIST? NOT " %PRIVATE_DIR%" EXIST? AND " %DESKTOP_PRIV_DIR%" EXIST? AND " %OFFICE_LAPTOP_NAME%" IS_CURRENT_PC? AND ;
При комментировании RULE в правиле выше ошибка пропадает.
Да и как-то много лишнего, так вроде тоже должно работать: - Code: Select all
<% : OFFICE_LAPTOP_NAME " SEMENT04" ; : IS_CURRENT_PC? \ ( a u -- ) " COMPUTERNAME" ENV COMPARE 0= ; : PRIVATE_DIR " C:\!ST" ; : DESKTOP_PRIV_DIR " z:\!ST" ; %>
#( OFFICE_LAPTOP_Backup_Laptop_To_Desktop RunMissed LoadProfile Time: 0 7 * * 2 * STRING-LIST: bld_syncList Rule: " outlook.exe" PROC-EXIST? NOT PRIVATE_DIR EXIST? AND DESKTOP_PRIV_DIR EXIST? AND OFFICE_LAPTOP_NAME IS_CURRENT_PC? AND ; Action:
-

Morituruz
-
- Posts: 728
- Joined: Sun, 14 Oct 2007, 01:51
by VoidVolker » Sun, 05 Feb 2012, 22:16
Если в строке только переменная, то делать вот так: - Code: Select all
" %PRIVATE_DIR%"
нет необходимости. Незачем помещать текстовую переменную в строку, в которой больше ничего нет. Надо так: - Code: Select all
PRIVATE_DIR
Где слово )# окончания задачи? Еще можно попробовать вот так: - Code: Select all
... Rule: " outlook.exe" PROC-EXIST? NOT PRIVATE_DIR EXIST? AND DESKTOP_PRIV_DIR EXIST? AND OFFICE_LAPTOP_NAME IS_CURRENT_PC? AND ; Action: ...
Т.е. явно указать окончание условия.
-

VoidVolker
- Site Admin
-
- Posts: 2907
- Joined: Tue, 25 Apr 2006, 17:56
by SphinxST » Sun, 05 Feb 2012, 22:29
Да, спасибо. Если не считать избыточности кода (с потерей производительности конечно), есть какие-то еще проблемы в такой записи " %VAR%" ?
-
SphinxST
-
- Posts: 18
- Joined: Thu, 17 Nov 2011, 12:27
Return to nnCron forum (Russian)
Who is online
Users browsing this forum: No registered users and 1 guest
|
|