IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Программа повисает на 3 секунды в случайное время, Помогите индийскому программисту.
сообщение
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


В общем во время этих зависаний (где-то на 3300 миллисекунд) даже мышь не работает, только винамп играет. Каждый раз повисает в разном месте. Уборка рандомизатора ничего не дала. НО. Если в модуле UView3D.pas закоментировать строчки с 605 по 610ю

glBegin(GL_QUADS);
glVertex3F(X1, -Y1, 0);
glVertex3F(X2, -Y2, 0);
glVertex3F(Lines[i + 1].X2, -Lines[i + 1].Y2, 0);
glVertex3F(Lines[i + 1].X1, -Lines[i + 1].Y1, 0);
glEnd;


то зависания вдруг исчезают...
Можете сами проверить - запускаете проект TrumGame, карту gorod.tr, маршрут номер 1, ничего не делаем, смотрим. Как правило в районе первого ответвления направо повисание.
Да, попытки применить таймер другого типа (см последнюю, закоментированную строчку из TView3D.Create), приводят к тому, что при выходе из конструктора программа выдаёт ошибку.
Где тут загвоздка, не знаю. Может вы с такой ерундой сталкивались?
Да, от вирусов комп чистил вроде.
Ссылка на архив с кодом:
http://tarasber.narod.ru/Tr__--__.rar


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 5)
сообщение
Сообщение #2


Гость






К сожалению, откомпилировать и прогнать программу не могу, что-то изменилось в новых версиях Дельфи, в частности, D2009 выдает вот это (ошибка в подсвеченной строке, значение S = '', откуда и ошибка, собственно smile.gif ) :

Прикрепленное изображение

сразу после выбора gorod.tr в диалоге открытия файла (еще до показа списка маршрутов)... Подозреваю, что дело в том, что после открытия карты ты вызываешь метод AddToTable, в котором помимо всего прочего делается:


RouteTable.RowCount := RouteTable.RowCount + 1; // Вот на это обрати внимание
RouteTable.Cells[0, n] := Sym1[s1] + Sym2[s2];


Там, где я показал, при изменении RowCount, происходит событие SelectCell, а данные в СтрингГриде еще не готовы, и... Происходит то, что ты видел на моем скрине...

Запустил твой EXE-шник, он открывает gorod.tr, все в порядке, запускаю первый маршрут, сначала порядка секунды - подвисание (ни на что не реагирует, загрузка процессора = 50%, курсор мыши = "часики"), тут вероятно идет инициализация, потом пошел трамвай, больше зависаний не обнаружено... Прошел несколько поворотов, мыши слушается везде, можно двигать окошко...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Какая у вас версия дельфы кстати? У меня седьмая.
У меня всё компилируется и запускается, странно.
Что значит "данные ещё не готовы"?
По подвисаниям. Забыл сказать - я в главном окне снимаю оба флажка "прогонять" и "под током". После снятия "прогона" возможно появление новых вагонов по ходу действия, может оно как-то влияет. Я там расставил логи, но причина тех задержек была не в коде обработки их поведения и не в коде отрисовки. То есть совсем интересно - причина не там, но если тот кусок убрать, то подвисания исчезают.
И что делать с таймером?
Забыл сказать об ещё одной проблеме. У другого человека нижние треугольники фона не все рисуются, из-за этого старый кадр недозатирается. (процедура ShowBackground их UView3D). В коде причины я в упор не вижу. Может ли быть причина в видеокарте? Это странно, ведь я использую только самые простые возможности ОпенГЛа.

А может у меня компилятор повредился?

Так, я перечитал ваше сообщение, я сначал подумал, что у вас компилируется но вылетает в том месте с таблицей, а у вас просто не компилируется, всё.
Вопрос по поводу "секундного подвисания". Если был включён флажок прогонки, то в этот момент происходит выпуск на маршруты с равномерным интервалом и прогонка всех имеющихся в городе вагонов, это около часа игрового времени, просто всё это перед стартом очень быстро прогоняется. У меня это занимает 2 минуты (селерон 600 МГц), откуда у вас "секундное подвисание"?!

Сообщение отредактировано: TarasBer -


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Какая у вас версия дельфы кстати? У меня седьмая.
Я же написал выше:
Цитата
в частности, D2009 выдает вот это


Цитата
Так, я перечитал ваше сообщение, я сначал подумал, что у вас компилируется но вылетает в том месте с таблицей, а у вас просто не компилируется, всё.
Неправильно подумал... У меня компилируется, запускается, но при попытке сделать
RouteTable.RowCount := RouteTable.RowCount + 1;

(метод AddToTable) вылетает с исключением... Причина описана выше: в момент увеличения RowCount немедленно вызывается обработчик события OnSelectCell стринггрида, там вызывается GetS1S2... Переходим в GetS1S2, что видим? В переменную S пишется значение из ячейки
s := Cells[0, SelRow];
, но ведь туда в этот момент еще ничего не записано!!! Запись-то происходит в следующей строке после увеличения RowCount, куда выполнение не доходит... Откуда S = пустой строке, и при попытке обратиться к S[ 1 ] получаем вылет...

Скорее всего в Дельфи 7 OnSelectCell работает не так, как теперь, поэтому у тебя вылета в рантайме не происходит...

Вот и получается, что не все то, что работает в Дельфи 7 будет работать без изменений в Дельфи 2009...

Цитата
просто всё это перед стартом очень быстро прогоняется. У меня это занимает 2 минуты (селерон 600 МГц), откуда у вас "секундное подвисание"?!
У меня не Селерон, и тем более не 600 МГц... Запустил твой EXE еще раз... Ну, не секунда, чуть меньше двух секунд. Скажем, две...

Добавлено через 7 мин.
P.S. Так, ну с ошибкой разобрался очень просто: меняем местами вот эти 2 строки и все запускается...

// было
// RouteTable.RowCount := RouteTable.RowCount + 1;
// RouteTable.Cells[0, n] := Sym1[s1] + Sym2[s2];

// стало
RouteTable.Cells[0, n] := Sym1[s1] + Sym2[s2];
RouteTable.RowCount := RouteTable.RowCount + 1;


Попробую сегодня - завтра понять, почему может происходить подвисание... smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


В общем выяснилось, что различные баги возникают где-то на трети компьютеров. В основном - недорисовка сцены. Возможно, я инициализирую Опенгл (дословно переписал процедуру с Краснова) так, чтобы он пошёл хоть как-то и там видимо какой-то буфер с полигонами переполняется, и у меня от этого повисает всё, а у других просто не всё рисуется. Не хотелось бы получить зависимость от железа для столь примитивной графики.
Кто в Опенгле много работал - знает, отчего такое бывает?

Да, в дополнение выложу на всеобщее обозрение картинки с багами (от двух разных людей, у одного фон глючит, у другого фары):


Прикрепленные файлы
Прикрепленный файл  screens.rar ( 460.61 килобайт ) Кол-во скачиваний: 201


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


В общем, я залез в
Свойства: Экран -> Параметры -> Дополнительно -> Диагностика
И полностью отрубил аппаратное ускорение. Моему супер-видеокарте ати рэйдж с аж 8 мегабайтами памяти это не надо. Зависания прекратились.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.04.2024 20:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name