![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Gershkovich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 8.2.2006 Репутация: 0 Всего: 2 |
Всем привет!
У меня многопоточное приложение. Для взаимодействия потоков использую синхронизированный буфер. Обыкновенная синхронизация TStringList через критическую секцию:
Условия выполнения такие: одновременно используют этот буфер около 10 потоков и еще главный поток использует FillTo для отображения строк в Memo Периодически возникает access violation Причем совершенно непредсказуемо и бессистемно. По разным адресам и с разным кодом ошибки. Отловить очень трудно - у меня не получилось. Частенько падает в методе FillTo на строке CS.Enter; Иногда вываливается в дебагер и останавливается на функции LoadAsRes Были ли у кого такие проблемы ? Где грабли ? Стоит ли перейти на использование другой схемы (например record + TList) ? Заранее спасибо. |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Gershkovich, Первое, как ты обращаешься к самому экземпляру TSyncStringList? Он ведь иоже должен быть защищен...
Второе
Выполняешь ли ты этот метод в Synchronize? Добавлено через 4 минуты и 25 секунд Gershkovich, ну и еще, существует такая штука как TThreadList, и не надо изобретать велосипеды -------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Gershkovich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 8.2.2006 Репутация: 0 Всего: 2 |
Rennigth,
1. А как он должен быть защищен ? Я, честно говоря, ничего такого не делал... Создаю один экземпляр TSyncStringList и передаю его в конструкторы потоков. И все. Должно еще что то быть ? 2. Извини. Под словами "главный поток" я имел в виду "VCL поток". Т.е. Synchronize не нужен. |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
каждый Enter-Leave желательно в try..finally "облачить"...
а в общем вроде криминала не вижу. возможно ошибка в другом месте -------------------- There are always someone smarter than you... |
|||
|
||||
| Rennigth |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 21.6.2004 Где: Moscow Репутация: 49 Всего: 76 |
Gershkovich, хм, вообще странно, попробовал твой код на тестовом приложении, все в порядке..., работает без ошибок.
-------------------- (* Honesta mors turpi vita potior *) |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Строка это ссылочный тип. При передаче его в поток необходимо производить явное копирование строки. Иначе оба потока будут ссылаться на одну и ту же память.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Gershkovich |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 243 Регистрация: 8.2.2006 Репутация: 0 Всего: 2 |
Ну что ж...
спасибо за участие наверно я где то напортачил буду разбираться... Всем спасибо. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |