powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по MultiThreading. Требуется помощь в уничтожении трэдов
4 сообщений из 4, страница 1 из 1
Вопрос по MultiThreading. Требуется помощь в уничтожении трэдов
    #32917396
Alex_il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ, объясните на пальцах!!
Суть задачи такова:
Имеется главная процедура main которая в бесконечном лупе выполняет функции чтения данных и передачи их через порт на удаленный девайс.
Для передачи данных используется thread, на функции которого передаются данные для девайся, и собственно thread инициирует функцию открытия порта и передачи данных через него.
Проблема возникла, когда обнаружилось, что thread девайса не убивается, к примеру в случае если порта отключен и передать данные не удается. Раз в какое-то время забивание памяти трэдами приводит к ребуту компа, что естественно убивает саму аппликацию. :-((((
Использование Thread.Abort в случае с отключенным портом не помогает, так как программа не возвращается из функции писания в порт (не получая акноледжа), все время пытаясь достучатся до порта.
Один из вариантов решения , который я пробую осуществить следующий:
после инициации трэда девайса майн инициирует еще один трэд, который параметром получает имя/номер девайсовского трэда и по идее должен этот тред через определенный промежуток времени убить и потом убится сам.
В связи с этим вопрос номер один:
Как убить чертов трэд из другого трэда????
И более общий вопрос номер два:
Какие еще есть существуют способы убийства трэдов (очищения паняти от них) ????
"Моя благодарность за помощь будет безгранична в пределах разумного" (С), так как замучился уже совсем :-)
...
Рейтинг: 0 / 0
Вопрос по MultiThreading. Требуется помощь в уничтожении трэдов
    #32917409
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наиболее подходящий вариант решения - чисто "архитектурный" - никогда не использовать в подобных случаях ожидание единственного события (завершение запущенной операции). как минимум 3 (три): собственно завершение, внутренний тайм-аут и внешний сброс. все средства для этого есть.

---
PS
Thread.Abort не может прервать не-managed низкоуровневый код. может помочь в некотрых случаях внешнее закрытие хэндла устройства (файла), но не всегда.
...
Рейтинг: 0 / 0
Вопрос по MultiThreading. Требуется помощь в уничтожении трэдов
    #32917421
Alex_il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
кузякак минимум 3 (три): собственно завершение, внутренний тайм-аут и внешний сброс. все средства для этого есть.

Если можно, вы не могли бы вкратце об этих средствах?
...
Рейтинг: 0 / 0
Вопрос по MultiThreading. Требуется помощь в уничтожении трэдов
    #32917428
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда работаешь с COM портом - открывай его с флагом FILE_FLAG_OVERLAPPED (0x40000000). все операции IO ReadFile/WriteFile должны использовать структуру OVERLAPPED и функцию GetOverlappedResult для проверки завершения. используй структуру NativeOverlapped для работы, в которую подставляешь хэндл ManualResetEvent события.

PS
overlapped не работает в CFW :(
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по MultiThreading. Требуется помощь в уничтожении трэдов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]