powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / виснет экранная форма
25 сообщений из 155, страница 5 из 7
виснет экранная форма
    #40107960
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придумал новый термин - "интуитивное программирование".
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107977
Фотография _avz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Придумал новый термин - "интуитивное программирование".

Если бог хочет наказать программиста, он подводит его к интуитивному программированию...
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108003
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_avz
wadman
Придумал новый термин - "интуитивное программирование".

Если бог хочет наказать программиста, он подводит его к интуитивному программированию...
Хуже всего есть с интуицией при этом проблемы...
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108142
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)
Mizer73
не висит. все зависание начинается с отрисовки окошек...

тогда и смотрите отрисовку окошек, может у вас GDI объекты не удаляются? (в диспетчере задач можно посмотреть использование GDI-объектов)


а чего им удаляться, если форма работает? Новые то не создаются...
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108145
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
goldmi45
Mizer73

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
struct Dat
{
	byte cmd;
	byte cmd2;
	byte data;
};

struct InOutData
{
	Dat * Data;
	int Count;
	int CountAll;
	void Create(int n)
	{
		Data = new Dat[n];
		CountAll = n;
	};
	void Delete(void)
	{
		if (CountAll > 0)
		{
			delete Data;
		}
	};
	void Remove(int y)
	{
		if (Count > 0)
		{
			for (int i = y; i < Count - 1; i++)
			{
				Data[i].cmd = Data[i + 1].cmd;
				Data[i].cmd2 = Data[i + 1].cmd2;
				Data[i].data = Data[i + 1].data;
			}
			Count--;
			Data[Count].cmd = 0;
			Data[Count].cmd2 = 0;
			Data[Count].data = 0;
		}
	}
};



Я извиняюсь, плюсы не очень знаю, но что-то тут полный треш..

При Delete у вас данные уничтожаются, но переменные Count и CountAll не сбрасываются. В итоге это может привести к попытке доступа к несуществующему полю.
При Remore у вас уменьшается количество, но кроме того, что затирается Data[y], у вас затирается Data[Count-1].


если объект удаляется, то при закрытии формы. Какие данные туда будут писаться после?
Count всегда больше нуля. максимум, что затрется, это Data[0]. Где тут трешь?
можно только count-- перед циклом поставить.
я давно пользуюсь такой структурой, и без проблем.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108146
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)
Mizer73
не висит. все зависание начинается с отрисовки окошек...

тогда и смотрите отрисовку окошек, может у вас GDI объекты не удаляются? (в диспетчере задач можно посмотреть использование GDI-объектов)


не нашел, как смотреть
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108147
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
kealon(Ruslan)
пропущено...

тогда и смотрите отрисовку окошек, может у вас GDI объекты не удаляются? (в диспетчере задач можно посмотреть использование GDI-объектов)


не нашел, как смотреть

нашел...
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108149
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mizer73
Mizer73
пропущено...


не нашел, как смотреть

нашел...


сейчас, без потоков, крутится 470 объектов.
подключу потоки, посмотрю...
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108182
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
C GDI все нормально, держит среднее значение
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108209
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73,

тогда вариантов не густо, либо профайлер брать, либо методом научного тыка отключать потенциальные места и смотреть результат.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108224
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
Оно в любом случае тормоз, поскольку в EDIT принципе не имеет способа добавить
строку. Это делается через получение целого текста, его модификацию и посылку
обратно. Поэтому TMemo для лога - один из наихудших вариантов.

А вот кстати, что вместо TMemo для лога лучше?
У меня блин, тоже есть таковые в логах и тоже как то подтормаживают похоже
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108226
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoftologicА вот кстати, что вместо TMemo для лога лучше?

TlistBox. Может, даже в виртуальном режиме из кольцевого буфера.
Консоль тоже забавна.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108227
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

SoftologicА вот кстати, что вместо TMemo для лога лучше?

TlistBox. Может, даже в виртуальном режиме из кольцевого буфера.
Консоль тоже забавна.


Для лога лучше всего файл. Имхо.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108228
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DarkMaster

Для лога лучше всего файл. Имхо.

Ну так то да, но иногда в GUI что то выводить то надо.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108231
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
SoftologicА вот кстати, что вместо TMemo для лога лучше?

TlistBox. Может, даже в виртуальном режиме из кольцевого буфера.
Консоль тоже забавна.
Благодарю. А что такое "в виртуальном режиме из кольцевого буфера" (набрал вручную, не скопипастил. из уважения:)
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108234
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SoftologicА что такое "в виртуальном режиме из кольцевого буфера" (набрал вручную, не
скопипастил. из уважения:)

TListBox.Style = lbVirtual
https://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.StdCtrls.TListBoxStyle

Кольцевой буфер это удобная (быстрая) структура для хранения фиксированного
количества данных (строк лога).

Ну а так-то да, для посмертного анализа нет ничего лучше файла. Хотя уже
магабайты не каждый осилит читать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108235
Softologic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
SoftologicА что такое "в виртуальном режиме из кольцевого буфера" (набрал вручную, не
скопипастил. из уважения:)

TListBox.Style = lbVirtual
https://docwiki.embarcadero.com/Libraries/Sydney/en/Vcl.StdCtrls.TListBoxStyle

Кольцевой буфер это удобная (быстрая) структура для хранения фиксированного
количества данных (строк лога).

Ну а так-то да, для посмертного анализа нет ничего лучше файла. Хотя уже
магабайты не каждый осилит читать.
Понято. Принято. Респект!
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108346
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kealon(Ruslan)
Mizer73,

тогда вариантов не густо, либо профайлер брать, либо методом научного тыка отключать потенциальные места и смотреть результат.


Обкладываю исключениями ПОМы..

столкнулся со следующим:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
try
				{
					if (Ex_Operator->Ardo2DataIn.Count > 0) {
						ReadIncomeIPData2(Ex_Operator->Ardo2DataIn.Data[0].cmd, Ex_Operator->Ardo2DataIn.Data[0].cmd2);
						try
						{
							Ex_Operator->Ardo2DataIn.Remove(0);
						}
						catch(Exception &e)
						{
							AnsiString a = "Команда " + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd) + "/" + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd2) + "  " + e.ToString() + "/" + e.UnitName() + "/" + e.Message + "/" + e.UnitScope();+ "/" + e.UnitName();
							MessageBoxA(Ex_Operator->Handle, a.c_str(), "обработка 2-2", MB_OK);
						}
					}
				}
				catch(Exception &e)
				{
					AnsiString a = "Команда " + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd) + "/" + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd2) + "  " +  e.ToString() + "/" + e.UnitName();
					MessageBoxA(Ex_Operator->Handle, a.c_str(), "обработка 2", MB_OK);
				}

void __fastcall ArdoThread::ReadIncomeIPData2(int Comma, int Comma2)
{
	try
	{

....



Ошибку "Ассess violation at adress ..." выкатывает под заголовком "обработка 2", т.е., как я понял, не нравится строка
if (Ex_Operator->Ardo2DataIn.Count > 0)
но, эта структура создается в событии formcreate, а процесс создается позже.
и этот аксесс вываливается только при старте.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108366
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм. Неужели все СИ-шники выдохли или выдохлись?
Почему тема продолжается в разделе Delphi?
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108388
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
northenerНеужели все СИ-шники выдохли или выдохлись?

Во-первых, потому что у автора Билдер и его вопросы не про язык.
Во-вторых, потому что здесь больше его собратьев по разуму.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108393
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
kealon(Ruslan)
Mizer73,

тогда вариантов не густо, либо профайлер брать, либо методом научного тыка отключать потенциальные места и смотреть результат.


Обкладываю исключениями ПОМы..

столкнулся со следующим:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
try
				{
					if (Ex_Operator->Ardo2DataIn.Count > 0) {
						ReadIncomeIPData2(Ex_Operator->Ardo2DataIn.Data[0].cmd, Ex_Operator->Ardo2DataIn.Data[0].cmd2);
						try
						{
							Ex_Operator->Ardo2DataIn.Remove(0);
						}
						catch(Exception &e)
						{
							AnsiString a = "Команда " + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd) + "/" + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd2) + "  " + e.ToString() + "/" + e.UnitName() + "/" + e.Message + "/" + e.UnitScope();+ "/" + e.UnitName();
							MessageBoxA(Ex_Operator->Handle, a.c_str(), "обработка 2-2", MB_OK);
						}
					}
				}
				catch(Exception &e)
				{
					AnsiString a = "Команда " + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd) + "/" + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd2) + "  " +  e.ToString() + "/" + e.UnitName();
					MessageBoxA(Ex_Operator->Handle, a.c_str(), "обработка 2", MB_OK);
				}

void __fastcall ArdoThread::ReadIncomeIPData2(int Comma, int Comma2)
{
	try
	{

....




Ошибку "Ассess violation at adress ..." выкатывает под заголовком "обработка 2", т.е., как я понял, не нравится строка
if (Ex_Operator->Ardo2DataIn.Count > 0)
но, эта структура создается в событии formcreate, а процесс создается позже.
и этот аксесс вываливается только при старте.
А дебаггер совсем не работает в билдере что-ли? Если нет - логируй каждую строчку кода и пытайся найти ошибку в своей логике.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108526
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Mizer73
пропущено...


Обкладываю исключениями ПОМы..

столкнулся со следующим:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
try
				{
					if (Ex_Operator->Ardo2DataIn.Count > 0) {
						ReadIncomeIPData2(Ex_Operator->Ardo2DataIn.Data[0].cmd, Ex_Operator->Ardo2DataIn.Data[0].cmd2);
						try
						{
							Ex_Operator->Ardo2DataIn.Remove(0);
						}
						catch(Exception &e)
						{
							AnsiString a = "Команда " + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd) + "/" + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd2) + "  " + e.ToString() + "/" + e.UnitName() + "/" + e.Message + "/" + e.UnitScope();+ "/" + e.UnitName();
							MessageBoxA(Ex_Operator->Handle, a.c_str(), "обработка 2-2", MB_OK);
						}
					}
				}
				catch(Exception &e)
				{
					AnsiString a = "Команда " + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd) + "/" + IntToStr(Ex_Operator->Ardo2DataIn.Data[0].cmd2) + "  " +  e.ToString() + "/" + e.UnitName();
					MessageBoxA(Ex_Operator->Handle, a.c_str(), "обработка 2", MB_OK);
				}

void __fastcall ArdoThread::ReadIncomeIPData2(int Comma, int Comma2)
{
	try
	{

....





Ошибку "Ассess violation at adress ..." выкатывает под заголовком "обработка 2", т.е., как я понял, не нравится строка
if (Ex_Operator->Ardo2DataIn.Count > 0)
но, эта структура создается в событии formcreate, а процесс создается позже.
и этот аксесс вываливается только при старте.
А дебаггер совсем не работает в билдере что-ли? Если нет - логируй каждую строчку кода и пытайся найти ошибку в своей логике.


дебагером нет возможности смоделировать ситуацию.
Однако, все вернул к прежнему варианту, через TMemo, и нормально заработало. Правда, пришлось пару дней потратить на восстановление.
Больше не надо слушать разных умников, с их теориями. теоретики, есть теоретики, и КПД у них - пшик... по практике.
больше трогать код не буду.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108533
northener
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не спешите радоваться. AV это очень плохая бяка. Победить её можно только полным выяснением причин из-за чего она хоть раз возникла!
Если не выяснили, вы до сих пор в зоне риска, что ваша ракета упадёт.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40108560
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
YuRock
пропущено...
А дебаггер совсем не работает в билдере что-ли? Если нет - логируй каждую строчку кода и пытайся найти ошибку в своей логике.


дебагером нет возможности смоделировать ситуацию.
Просто интересно. А что мешало брэйкпойнт поставить где надо и запустить?
...
Рейтинг: 0 / 0
виснет экранная форма
    #40109642
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock
Mizer73
пропущено...


дебагером нет возможности смоделировать ситуацию.
Просто интересно. А что мешало брэйкпойнт поставить где надо и запустить?

так не могу найти то место, где это проиходит.

на домашнем компьютере все смоделировал - работает на ура.
на рабочих запускаю - ползет access violation
причем это начинает ползти при включении функционала обмена данными.
все эти точки облепил исключениями - ни одно не ловит это место.

сейчас пытаюсь настроить madexcrption - пока ничего не выходит.
однако, при закрытии проги, иногда выходит таже фигня - access violation. mad выдал табличку структуры данных с пустыми местами и адресами.
не могу понять, к какому месту это приложить.
...
Рейтинг: 0 / 0
25 сообщений из 155, страница 5 из 7
Форумы / Delphi [игнор отключен] [закрыт для гостей] / виснет экранная форма
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]