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

А я бы лучше посоветовал https://docwiki.embarcadero.com/Libraries/Sydney/en/System.Generics.Collections.TThreadedQueue

Не зависит от ОС.

Да и нет ничего хуже, чем "забить" спамом систему сообщений. Так можно и винду подвесить.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107250
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или связку обычного TQueue + TCriticalSection.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107260
Mizer73
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
Не зависит от ОС.

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

Я эту сказку много лет слышу, но ни разу с таким не сталкивался на практике.
Как и с теми, кто тоже с этим сталкивался.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107274
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Лично сталкивался. Но не в своем ПО.
Давно правда было. Может с тех пор пофиксили.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107276
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
а чем отличается от обычного потока?
Мда. Тебе букварь по потокам надо читать.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107277
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat
Да и нет ничего хуже, чем "забить" спамом систему сообщений. Так можно и винду подвесить.

Лимит 10т на поток, дальше будет отлуп. Периодически случается, если обработка тормозит. Ничего страшного, даже на другие потоки процесса не влияет.
Но своя очередь более удобна, если не нужно обрабатывать виндовые сообщения (от таймера, например)
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107279
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Лично сталкивался. Но не в своем ПО.

10000 сообщений закинуть и не обработать? Это нужно быть тотальным рукожопом.
Но не свое ПО наверняка не имеет названия, либо им нельзя светить?
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107285
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalНо своя очередь более удобна, если не нужно обрабатывать виндовые сообщения (от
таймера, например)

....и поэтому не может применяться в GUI потоке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107295
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Да я не помню подробностей уже.
Давно было. Win2000 и все такое.

Винда начинала тупить просто недетски, даже старый таск мэнаджер. При этом загрузка CPU минимальна.
Тупило явно там где требуется обработка сообщений, они просто не проходили вовремя.
Что за ПО ломало винду сейчас уже и не помню.

Помню что причина была найдена в перегрузке системы сообщений ОС. Вроде по системным евентам нашли.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107324
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Fr0sT-BrutalНо своя очередь более удобна, если не нужно обрабатывать виндовые сообщения (от
таймера, например)

....и поэтому не может применяться в GUI потоке.
однако в VCL своя очередь вполне успешно применяется, и этому есть причины, и они всё более актуальны
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107330
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)однако в VCL своя очередь вполне успешно применяется, и этому есть причины

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

Опосля то оно каждый решение найдёт.
Построить архитектуру до появления проблем, которые она должна решать, довольно сложно. А эта архитектура, хоть и с заплатками, выдержала все хаки, которые появились в ОС.
Более того, микрософт фактически скопипастила эту архитектуру (I/O Completion Ports).
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107404
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

Fr0sT-BrutalНо своя очередь более удобна, если не нужно обрабатывать виндовые сообщения (от
таймера, например)

....и поэтому не может применяться в GUI потоке.

Если только совместно, но да, в GUI потоке особо смысла в ней нет - очередь уже есть, выборка тоже, т.е. вся обвязка, которая требуется для заведения виндовой очереди в фоновых потоках, уже готова. Даже case MsgRec.message и прочие апишные кишки не нужно делать - спасибо механизму procedure MsgFoo(var msg: TFooMsg); message MSG_FOO;
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107406
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman
10000 сообщений закинуть и не обработать? Это нужно быть тотальным рукожопом.
Но не свое ПО наверняка не имеет названия, либо им нельзя светить?

У меня бывает, если запрос к базе сурово висит. Тогда механизм очистки не успевает сработать, и лимит исчерпывается.
Еще остается странный баг в потоке файловой записи при ||-ном запуске архиватора - 7зип как-то уж очень жестоко тормозит хард, хотя и странно, что прям настолько, чтобы запись одного кб длилась несколько минут.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107475
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
wadman
Mizer73,

три простых правила для начинающего многопоточника:
1. Никаких synchronize
2. Никаких Application.ProcessMessages
3. Никаких обращений к визуальной части из других потоков

Самое простое общение между основным и доп.потоком - через сообщения PostMessage.


по-быстрому ничего не нашел про postmessage/
а какие еще варианты есть?
Используй TThread.Queue, Luke!
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107481
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mizer73
wadman
Mizer73,

три простых правила для начинающего многопоточника:
1. Никаких synchronize
2. Никаких Application.ProcessMessages
3. Никаких обращений к визуальной части из других потоков

Самое простое общение между основным и доп.потоком - через сообщения PostMessage.


по-быстрому ничего не нашел про postmessage/
а какие еще варианты есть?
Еще - обновлять глобальную переменную через критическую секцию, а в главном потоке - через нее же читать эту переменную по таймеру.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107488
shalamyansky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
обновлять глобальную переменную через критическую секцию, а в главном потоке - через нее же читать эту переменную по таймеру.

Читать-то зачем через критическую секцию? Если читать только для того, чтобы прочитать, не надо себя ограничивать. Вот если читать для того, чтобы по результату обновить, а-ля транзакция, тогда, конечно, да. И заключить в скобки всю транзакцию.
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107492
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shalamyanskyЧитать-то зачем через критическую секцию?

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

у него там TStringList и надо быть
уверенным, что он не исчезнет и не поменяется в процессе чтения.

А... Ну, если чтение не атомарное, тогда, конечно, да...
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107520
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
shalamyanskyЧитать-то зачем через критическую секцию?

Затем, что, судя по соседнему топику, у него там TStringList и надо быть
уверенным, что он не исчезнет и не поменяется в процессе чтения.дык у TStringList (и иже с ними) есть встроенные методы блокирования модификации.
а вот если он ещё и сам исчезнуть может, то ой!
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107522
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийа вот если он ещё и сам исчезнуть может, то ой!

Первый принцип параноидальной многопоточности: исчезнуть может всё, что не
прибито гвоздями к полу. И что-то я не помню блокировок в самом TStringList...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
виснет экранная форма
    #40107562
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal
У меня бывает, если запрос к базе сурово висит. Тогда механизм очистки не успевает сработать, и лимит исчерпывается.

10000 сообщений в очереди. Все висят. Этим не хвастаться нужно, а исправлять.
Отправлять запросы в другой поток и ждать ответа и между делом работать с очередью.

Когда я понимал, что в очереди 100 сообщений висят, то этого было достаточно для понимания, что проблема не в очередях.

10000 сообщений, Карл! Этого мало. :(

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

Затем, что, судя по соседнему топику, у него там TStringList и надо быть
уверенным, что он не исчезнет и не поменяется в процессе чтения.

TStringList - это попытки разные...
уже и этого нет.

сделал обмен через структуру

Код: 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.
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;
		}
	}
};



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

что же все-таки тормозит процесс?
Почему внутрянка, прогресс-бар, и иже с ними - все прекрассно работает, а на проц добавляется немного нагрузки и отрисовка окон начинает тормозить капитально.
Что на это влияет?
Еще никто не высказал мысль, кроме того, что общаться из потока с VCL из основной формы - плохо.
Почему плохо, что там не подтирается?
Почему открываю окошко, а там видна только рамка контура и буковки с текстовыми полями, а под ним торчит то,Ю что было под ним на форме, и все это накладывается друг на друга, фон окошка не закрашивается.

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


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