|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.09.2014, 02:25 | #1 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Потоки внутри DLL
Доброго времени!
Есть некая DLL которая имеет примерно такую структуру: Код:
Есть глобальные крит. секция и есть массив объектов. GetObject внешнего класса(его дергает приложение вызывающее DLL), возвращает из массива объект, крит. секция блокирует доступ к GetObject пока эта функция занята в другом потоке внешнего приложения, т.е. нельзя чтобы чего-то два штуки получили один TWorkObject. Но дилема в другом, приложение подвисает целиком на 700 мс - 2 сек.(в его контекст загружена DLL) что создает очень большие проблемы, т.к. нагрузка большая и работа тоже не маленькая, которую кстати и выполняет эта библиотека(пара тысяч единиц данных в секунду). Подвисает при условии что, в массиве минимум 6 объектов свободны, и проблем особо с получением объекта нет. Итого наблюдаю задержку от 700 мс до 2-5 сек. Иногда вообще ступор и все висит минут 5(это уже ПИ***Ц). И вот вопрос: Решится ли проблема зависания основного потока с DLL если каждый TWorkObject будет отдельным потоком внутри DLL для выполнения тяжелых под-задач? |
18.09.2014, 08:14 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
А вообще я бы создал конкретно для этой цели отдельный экзешник. Вопрос конечно в том что передавать и как, если это объект то пичаль, а если простые данные то ИМХО так будет проще.
I'm learning to live...
|
|
18.09.2014, 08:23 | #3 |
Заблокирован
Регистрация: 12.09.2014
Сообщений: 544
|
По идее нет. Потоку, работающему с dll так и так придётся ждать выполнение работы внутри библиотеки. Соответственно поток будет висеть. Выход - доп поток в основном коде, или как вариант, попытка синхронизации dll с программой.
|
18.09.2014, 09:29 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Тогда не понимаю твоей мысли: в ДЛЛ организовывается поток, который не мешает другим что-то делать параллельно.
I'm learning to live...
|
|
18.09.2014, 10:05 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
из кода не видно, что именно вешает программу.
процедура получения объекта или все же процедура в объекте. потоков тут вообще не наблюдаю. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
18.09.2014, 10:21 | #6 | |||||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
Цитата:
Возвращается интерфейс объекта для работы с ним. Цитата:
Мне нужно это убрать вместе с замиранием доп-потоков Цитата:
Цитата:
|
|||||
18.09.2014, 12:06 | #7 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
нет смысла создавать новый поток если программа ждет результат сейчас и тут.
иначе придется менять архитектуру на асинхронную. в общем, нужно ли программе результат этих функций. PS: для отладки могли и выкинуть лишний тяжелый код на время, чтоб определить где виснет. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 18.09.2014 в 12:10. |
18.09.2014, 12:25 | #8 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
Из отладки у меня только несколько гб логов Если объекты превратить в потоки с этими объектами, решит ли это проблему? |
|
18.09.2014, 12:39 | #9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
а что методам запрещают возвращать результат?
программе нужен результат выполнения? или она их дергает с темой "а пусть само работает" если второе то проблем нет. в первом случае ничего не меняется, ибо программа будет ждать результат все равно. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Потоки. Закрываются все потоки при ошибке в одном. | Son | Общие вопросы Delphi | 11 | 01.11.2013 09:32 |
Как подружить TwebBrowser, DLL и потоки??? | d@lphi | Общие вопросы Delphi | 3 | 10.03.2012 21:09 |
bass.dll и mms потоки | vismut | Мультимедиа в Delphi | 8 | 07.10.2011 19:01 |
WPF, DLL и потоки... | Namolem | WPF, UWP, WinRT, XAML | 3 | 22.11.2010 22:54 |
DLL, потоки | BOBAH13 | Общие вопросы Delphi | 23 | 27.02.2008 20:43 |