Russian Qt Forum
Ноябрь 24, 2024, 19:24 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 3 [4]   Вниз
  Печать  
Автор Тема: Библиотека-убийца  (Прочитано 23116 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #45 : Апрель 13, 2014, 15:47 »

Вы не ограничивая никого в средствах бросили вызов. Вызов принят, результат есть
Да ради Бога. К сожалению результат с terminate никому не интересен, из-за невозможности его практического использования.
 
Записан
Bepec
Гость
« Ответ #46 : Апрель 13, 2014, 15:48 »

Кхм. Вы привели стандартное описание терминайтеда. Где там что страшного написано про порчу процесса?

Приводятся те же проблемы, что привел и я - распил памяти, изменение переменных. Да, ещё вон есть извещение dll о закрытии потока, но я о нем мало что знаю, но что-то подсказывает мне что это штатная и предусмотренная ситуация.

PS если читать документацию - везде рекомендуется, но не запрещается.
« Последнее редактирование: Апрель 13, 2014, 15:50 от Bepec » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #47 : Апрель 13, 2014, 15:50 »

Кхм. Вы привели стандартное описание терминайтеда. Где там что страшного написано про порчу процесса?
Нет я привел предупреждение из стандартного описания.
И я ни коем образом никого не отговариваю от его использования. Нормально, значит нормально.
Записан
Bepec
Гость
« Ответ #48 : Апрель 13, 2014, 15:56 »

Видел 2 проекта для обработки данных с использованием терминейтеда. Работают спокойно, особо не падают.

Собственно это единственный способ завершить зависший поток, увы. Так же как и kill для процесса.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #49 : Апрель 13, 2014, 15:58 »

Собственно это единственный способ завершить зависший поток, увы. Так же как и kill для процесса.

Но процесс мы можем убить без последствия для других процессов, а вот нитку для процесса не всегда.
Записан
Bepec
Гость
« Ответ #50 : Апрель 13, 2014, 16:38 »

Можно толочь воду в ступе, а можно сделать 2 проекта и сравнить. Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #51 : Апрель 13, 2014, 16:40 »

Можно толочь воду в ступе, а можно сделать 2 проекта и сравнить. Улыбающийся
Какие два проекта?
Записан
Bepec
Гость
« Ответ #52 : Апрель 13, 2014, 17:12 »

1 с терминайтедом, второй с процессом.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #53 : Апрель 13, 2014, 17:17 »

1 с терминайтедом, второй с процессом.
Для чего?
Если OKTA устроит вариант с terminate потока, то хорошо (хотя тогда темы бы этой не было). Для меня лично этот вариант неприемлем.
Записан
OKTA
Гость
« Ответ #54 : Апрель 14, 2014, 01:07 »

Ух вы развели тут, стоило отлучиться на выходные)))) Попробую ответить на все увиденные вопросы разом.
К сожалению, простой terminate потока с либой не поможет, т.к. библиотека динамически хапает память и грохнув поток, вся память занятая останется на месте в лучшем случае(а библиотека может хапать очень много памяти), а в худшем udefined behaviour, т.к. мне неизвестно, что либа творит в памяти)
Ф-ия очистки памяти у библиотеки тоже есть, но она так же останавливается в недрах библиотеки и не возвращает значения.
Обнаружился еще один неприятный момент, который ставит к нулю все попытки выделения либы в отдельный процесс - есть ф-ии, которые действительно долго работают в нормальной библиотеке, а в кривой так же приводят к зависанию,  соответственно различить их в принципе становится невозможно, т.к. я не определю работает либа на самом деле или просто зависла.
Посмотрим, что скажет на это заказчик))
А выделить работу с библиотекой в отдельный процесс это мало того, что жестко, т.к. на универсальность решения рассчитывать не приходится (хотя я нашел статью, где какие-то австралийцы сделали универсальную обертку для работы с либами, но так и не понял как и примера тоже не нашел), а к тому же сама специфика библиотек очень тягостна. Функции возвращают только true/false, а сами данные передаются обратно через параметр функции, но не в классическом виде, когда мы сами выделяем память для значения, а либа сама выделяет память и отдает нам указатели. Я уже заводил тему про это - http://www.prog.org.ru/topic_26764_0.html, если помните и как такое тягать между процессами, я не представляю  Обеспокоенный
Но спасибо всем за помощь) Завтра на работе решу, что делать)
Записан
Страниц: 1 2 3 [4]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 23.