Вверх ↑
Этот топик читают: Гость
Ответов: 1429
Рейтинг: 50
#1: 2010-08-19 21:19:37 ЛС | профиль | цитата
При работе разных программ, написаных на HiAsm, часто появлюятся целые серии окошек "self destruction" с кнопкой "ok".
Я такого не программировал, что это может значить?
карма: 0

0
Ответов: 3349
Рейтинг: 233
#2: 2010-08-19 21:21:38 ЛС | профиль | цитата
Это значит что объект пытался удалить сам себя.
Обычно это бывает если из мультика выходит событие на точку ##delete or ##clear
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#3: 2010-08-19 21:22:39 ЛС | профиль | цитата
Это значит, что программа собрана логически не верно
карма: 27
0
Ответов: 1429
Рейтинг: 50
#4: 2010-08-19 21:40:05 ЛС | профиль | цитата
Получается, все мои программы так собраны
1. Хорошо бы понять хоть какой-то критерий "логически правильной" сборки.
2. Можно ли как-то настроить компилятор, или среду, чтобы она предупреждала о неправильной схеме?
3. Можно ли как-то отключить такое сообщение? Их десятки за сутки набирается/

Ivann писал(а):
выходит событие на точку ##delete or ##clear

Такого нет у меня.
------------ Дoбавленo в 21.40:
Это сообщение появляется даже в тех программах, где нет удалений каких-либо динамических обьектов. Одна статика.
карма: 0

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#5: 2010-08-19 21:43:16 ЛС | профиль | цитата
login писал(а):
где нет удалений каких-либо динамических обьектов

Вообще-то, "self destruction" принадлежит динамическому мульту, как ты там используешь его в статике, еще разбираться надо, а примера, которое такое выдает, как такового, нет
карма: 22

0
Ответов: 1429
Рейтинг: 50
#6: 2010-08-19 21:44:15 ЛС | профиль | цитата
Удивительно, программа делает 2000 полных циклов самой себя за сутки, работая правильно.
Из которых появляется 20 сообщений Self Destruct. А что, остальные 1980 циклов были логически правильные?
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#7: 2010-08-19 21:49:35 ЛС | профиль | цитата
login, без схемы этот разговор не имеет смысла. Появление данного сообщения само по себе не является признаком ошибки, а всего лишь предупреждает о том, что попытка удаления схемы оказалась неудачной и она (схема) продолжит висеть в памяти.
карма: 27
0
Ответов: 1429
Рейтинг: 50
#8: 2010-08-19 21:49:45 ЛС | профиль | цитата
nesco писал(а):
"self destruction" принадлежит динамическому мульту

Полезная информация. Буду наблюдать за этим как-то.

А отключать можно такие сообщения? (поскольку такую редкую ошибку можно и за 5 лет не найти)
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#9: 2010-08-19 21:51:13 ЛС | профиль | цитата
login, вы из панели управления самолетом тоже все лампочки удалите, если одна из них начнет красным мигать?
карма: 27
0
Разработчик
Ответов: 26163
Рейтинг: 2127
#10: 2010-08-19 21:53:38 ЛС | профиль | цитата
Dilma писал(а):
что попытка удаления схемы оказалась неудачной и она (схема) продолжит висеть в памяти

Насколько я не ошибаюсь, то такое может быть, если ипользуются два доступа из разных потоков, один из которых перезапускается, а второй обрашается к этой схеме.
Dilma, поправь, если я ошибся
карма: 22

0
Ответов: 1429
Рейтинг: 50
#11: 2010-08-19 21:55:46 ЛС | профиль | цитата
Dilma писал(а):
о том, что попытка удаления схемы оказалась неудачной и она (схема) продолжит висеть в памяти.

Спасибо. Это конструктивно.

Уже переделывать готовый софт нельзя, я отдал человеку готовую прогу, он мне звонит и жалуется. Но я другим проэктом занят поэтому и спрашиваю, там была задача не критичная, на один конкретный случай отключить это сообщение можно или нельзя?

А суть я понял буду внимательно следить за тем что делаю.
карма: 0

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#12: 2010-08-19 21:58:24 ЛС | профиль | цитата
login писал(а):
отключить это сообщение можно или нельзя?

Можно, но только в коде компонента

карма: 22

0
Ответов: 1429
Рейтинг: 50
#13: 2010-08-19 22:00:58 ЛС | профиль | цитата
Это оно? В элементе MultiElementEx:


function THIMultiElementEx.TestEvent;
begin
Result := true;
while assigned(G) do begin
if F=G.Hnd then begin
_debug('Self destruction is not allowed !!!');
exit;
end;
G := G.Prv;
end;
Result := false;
end;


----------
То-есть. всмысле. больше нbгде, а только тут это сообщение есть/
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#14: 2010-08-19 22:03:42 ЛС | профиль | цитата
проверка с выдачей этого сообщения стоит только на методах Delete, HDelete и Clear (который использует Delete). Поэтому как-то сомнительно, что точки не используются, а сообщение не появляется.
------------ Дoбавленo в 22.03:
login писал(а):
Это оно?

да
карма: 27
0
Ответов: 1429
Рейтинг: 50
#15: 2010-08-19 22:05:39 ЛС | профиль | цитата
Да, сомнительно. Всё просмотрю, вдруг я ошибаюсь, и где-то использовал. Спешил.
Спасибо, Вам всем за помощь.
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)