Вверх ↑
Этот топик читают: Гость
Ответов: 3889
Рейтинг: 362
#31: 2011-06-29 12:03:23 ЛС | профиль | цитата
У менеджера памяти явно какая-то проблема в многопоточности, такое ощущение, что одна и та же расшаренная структура, описывающая распределение памяти, используется во всех потоках и всё хорошо работает если потоки имеют идентичные по структуре данные. Но стоит одному из них немного отличиться, один поток меняет структуру, все остальные валятся к чёртовой бабушке т.к. полагают, что структура такая, какой они её формировали. Отсюда такие дикие адреса, по которым они обращаются, отсюда же нормальная работа некоторых потоков на фоне вылета остальных - для них структура "подошла".
карма: 1

0
Разработчик
Ответов: 26229
Рейтинг: 2140
#32: 2011-06-29 12:06:38 ЛС | профиль | цитата
1nd1g0 писал(а):
У менеджера памяти явно какая-то проблема в многопоточности

А у менеджера ли
карма: 22

0
Ответов: 3889
Рейтинг: 362
#33: 2011-06-29 12:42:52 ЛС | профиль | цитата
nesco писал(а):
у менеджера ли

Если всё так, то да, у менеджера - косвенная проблема, а прямая вина тех, кто делал многопоточность, конечно (исключая разработчиков ОС, не о них речь). Справедливости ради, это не так то просто отловить, но вполне реально. Но лично мне некогда возиться с многопоточной трассировкой, так что могу понять, почему было оставлено так, как есть. Тем более, сейчас ускорилось железо, сильно, изменились механизмы работы ОС, да и наученные горьким опытом, разработчики, похоже, не злоупотребляют потенциально опасными полиморфными динамическими структурами данных в разных экземплярах потоков. Потому для многих это - "дела давно минувших дней":

CriDos писал(а):
Часто раньше сталкивался с этой проблемой в различных ОС (xp-7)

Я тоже смутно припоминаю подобное в некоторых схемах. Менял на однопоточные иили применял другие элементы, всё работало и забывал об этом, отметив в памяти, чего стоит избегать. А на новых ПК и ОС ещё реже встречалось по описанным выше причинам, так и жили )
карма: 1

0
Разработчик
Ответов: 26229
Рейтинг: 2140
#34: 2011-06-29 12:53:59 ЛС | профиль | цитата
1nd1g0 писал(а):
Если всё так, то да, у менеджера - косвенная проблема

А может, все же, в неправильной работе с потоками. Если потоки не синхронизированны по доступу к одному и тому же участку памяти, то результат может быть налицо. Зря, что ли, придумали критические секции, вот только реализованно ли это все на глобальном уровне ключевой библиотеки, которая писалась сравнительно давно


карма: 22

0
Ответов: 3889
Рейтинг: 362
#35: 2011-06-29 13:04:17 ЛС | профиль | цитата
nesco, я об этом и говорю. Древний менеджер, похоже, не подразумевал многопоточности, а разработчики в дальнейшем это не учли, когда её делали. Возможно, у них таки вышли обновления иили новые версии среды Delphi, но наш-то форк замер в веках с наследственными болезнями. Ну, да это всё софистика, однако факт на лицо - вылетает именно менеджер памяти, вылетает потому, что конфликтует сам с собой из другого потока, не поделили одну и ту же секцию. Кто виноват - догадываемся, на "что делать" ответ, вероятно, "методом тыка подбирать условия, при которых проблема не проявляется", избегать лишних потоков в частности.

Как я уже говорил, не будем же мы все элементы переписывать, где слишком часто встречаются операции с динамической памятью.
карма: 1

0
Разработчик
Ответов: 26229
Рейтинг: 2140
#36: 2011-06-29 13:13:14 ЛС | профиль | цитата
1nd1g0 писал(а):
избегать лишних потоков в частности

Или синхронизировать их при помощи элемента кртической секции -- SafeMode (посыпаю голову пеплом , я забыл написать про него в wiki)
карма: 22

0
Ответов: 3889
Рейтинг: 362
#37: 2011-06-29 13:18:19 ЛС | профиль | цитата
nesco, да и MutexThread не сильно документирован и снабжён примерами, ИМХО, потому никто нигде его и не использовал, из тех схем, что я видел. Думаю, стоит объяснить в справке, зачем вообще это нужно.

Кстати, что насчёт механизма синхронизации для потоков, порождённых таймером?
карма: 1

0
Разработчик
Ответов: 26229
Рейтинг: 2140
#38: 2011-06-29 13:34:18 ЛС | профиль | цитата
1nd1g0 писал(а):
Кстати, что насчёт механизма синхронизации для потоков, порождённых таймером?

Таймер синхронизирован с главным потоком приложения, и с его очередью событий, не вижу никаких проблем запускать из него наследованный поток, а вот наоборот -- запускать таймер из порожденного потока крайне нежелательно. Точнее, можно, но только со входа SyncExec, тк этот выход синхронизирован с главным потоком
карма: 22

0
Ответов: 3889
Рейтинг: 362
#39: 2011-06-29 13:35:24 ЛС | профиль | цитата
nesco писал(а):
запускать из него наследованный поток
nesco писал(а):
поток в потоке, дополнительный геморрой на голову

карма: 1

0
Разработчик
Ответов: 26229
Рейтинг: 2140
#40: 2011-06-29 13:45:12 ЛС | профиль | цитата
Иногда, без этого трудно работать, особенно с интернет приложениями и сетью. Там уже не рад, что его не поставил, такие глюки основного потока наблюдаются при нарушении работы с сетью, что мама не горюй. Или запускашь звук, и что, будешь сидеть и ждать, когда же он проиграет
------------ Дoбавленo в 13.45:
1nd1g0, сложностей не должно возникать с доп потоками, если четко представлять себе работу с ними. Но, увы, рядовые пользователи об этом мало чего знают, отчего и пытаются выводить данные прямо в контролы, забывая (или не зная), что так делать нельзя. Или запустят два потока с одним промежутком времени и одним потоком читаю, а другим пытаются писать в массив, что тут будет, сам черт не знает. Как правило, через определенное время вся конструкция благополучно слетает
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#41: 2011-06-29 21:08:39 ЛС | профиль | цитата
nesco, в cmd выполняешь
tasklist /V /FO CSV /NH > c:log.txt
получается очень даже красивый файл
а после нашего doConsoleExec, если записать из StrList в файл -- такой бардак !
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26229
Рейтинг: 2140
#42: 2011-06-29 22:07:51 ЛС | профиль | цитата
Tad писал(а):
а после нашего doConsoleExec, если записать из StrList в файл -- такой бардак !

Ну, а что ты хотел -- что имеем, то и имеем
карма: 22

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