Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Корректное завершение потоков DLL 
:(
    Опции темы
Stormeg
Дата 2.7.2009, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.7.2009

Репутация: нет
Всего: нет



В DLL_PROCESS_ATTACH создаеться поток. На момент DLL_PROCESS_DETACH созданный поток уже не существует, некорректно завершен (убит) системой.
Как обойти данную ситуацию и самому позаботиться о завершении потока? Возможно как-то определить до события DLL_PROCESS_DETACH, что у системы есть намерения выгрузить данную DLL? DLL выгружаеться только в случае завершения программы. (Программа не знает о существовании DLL)
(Похожая ситуация без решения)
PM   Вверх
DrHex
Дата 2.7.2009, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



Система постарается(и у ней получится) убить поток, при выгрузки библиотеки, связано это с тем что поток может выполнять код в адресном пространстве процесса отведенного для этой библиотеки, да и в конце концов память потока(стек ну и че нибудь еще) хранится та в dll, а память надо освободить значит и прихлопним поток.

Можно вам посоветовать поставить хук на выгрузу библиотеки, но сново таки разве это решение проблемы? Разве что как временное....


А вообще в динамических библиотеках создавать поток, это не самое хорогое решение. Разве что если библиотека живет все время выполнения процесса.

Хотелось бы узнать как происходит взаимодействие между библиотекой и процессом который использует библиотеку.
--------------------
google.com и это все.
PM MAIL   Вверх
Stormeg
Дата 2.7.2009, 01:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.7.2009

Репутация: нет
Всего: нет



Цитата(DrHex @  2.7.2009,  01:02 Найти цитируемый пост)
Хотелось бы узнать как происходит взаимодействие между библиотекой и процессом который использует библиотеку.

DLL заставляет процесс вызывать пару API-функций через себя. Поток в DLL - синхронная прослушка именованного канал, на другой стороне которого висит управляющий работой DLL сторонний процесс. Как вариант  локального решения проблемы можно попробовать изменить организацию общения с управляющим процессом, хм.. 
Убиение потока не приводит ни к чему критическому в работе программ. Но хочеться все сделать правильно.

Это сообщение отредактировал(а) Stormeg - 2.7.2009, 01:34
PM   Вверх
Lazin
Дата 2.7.2009, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Цитата(DrHex @  2.7.2009,  01:02 Найти цитируемый пост)
Можно вам посоветовать поставить хук на выгрузу библиотеки, но сново таки разве это решение проблемы? Разве что как временное....

ага, и код хука будет то-же находится в dll smile
Stormeg, можешь начинать думать о том, как переписать свой код так, что-бы поток не нужно было завершать, или переписать библиотеку так, что-бы у нее была ф-я a-la Finalize, но тогда программа должна будет знать о существовании dll smile 
PM MAIL Skype GTalk   Вверх
DrHex
Дата 4.7.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



Цитата

ага, и код хука будет то-же находится в dll 

НУ и что?
--------------------
google.com и это все.
PM MAIL   Вверх
Lazin
Дата 4.7.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



Цитата(DrHex @  4.7.2009,  19:13 Найти цитируемый пост)
НУ и что?

а ты уверен, что система сможет вызвать твой callback до того как поток завершится?  smile 
PM MAIL Skype GTalk   Вверх
Riply
Дата 5.7.2009, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 1
Всего: 32



DLL_THREAD_DETACH ?
PM MAIL   Вверх
Lazin
Дата 5.7.2009, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 8
Всего: 154



так-как поток в этом случае завершается некорректно, DllMain c параметром DLL_THREAD_DETACH не вызывается
PM MAIL Skype GTalk   Вверх
DrHex
Дата 5.7.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 2.5.2009

Репутация: нет
Всего: нет



Цитата

а ты уверен, что система сможет вызвать твой callback до того как поток завершится?

Вы забили как ставятся хуки(разумеется не виндовские)????
--------------------
google.com и это все.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0801 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.