Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по MultiThreading. Требуется помощь в уничтожении трэдов
|
|||
|---|---|---|---|
|
#18+
Народ, объясните на пальцах!! Суть задачи такова: Имеется главная процедура main которая в бесконечном лупе выполняет функции чтения данных и передачи их через порт на удаленный девайс. Для передачи данных используется thread, на функции которого передаются данные для девайся, и собственно thread инициирует функцию открытия порта и передачи данных через него. Проблема возникла, когда обнаружилось, что thread девайса не убивается, к примеру в случае если порта отключен и передать данные не удается. Раз в какое-то время забивание памяти трэдами приводит к ребуту компа, что естественно убивает саму аппликацию. :-(((( Использование Thread.Abort в случае с отключенным портом не помогает, так как программа не возвращается из функции писания в порт (не получая акноледжа), все время пытаясь достучатся до порта. Один из вариантов решения , который я пробую осуществить следующий: после инициации трэда девайса майн инициирует еще один трэд, который параметром получает имя/номер девайсовского трэда и по идее должен этот тред через определенный промежуток времени убить и потом убится сам. В связи с этим вопрос номер один: Как убить чертов трэд из другого трэда???? И более общий вопрос номер два: Какие еще есть существуют способы убийства трэдов (очищения паняти от них) ???? "Моя благодарность за помощь будет безгранична в пределах разумного" (С), так как замучился уже совсем :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2005, 23:33 |
|
||
|
Вопрос по MultiThreading. Требуется помощь в уничтожении трэдов
|
|||
|---|---|---|---|
|
#18+
наиболее подходящий вариант решения - чисто "архитектурный" - никогда не использовать в подобных случаях ожидание единственного события (завершение запущенной операции). как минимум 3 (три): собственно завершение, внутренний тайм-аут и внешний сброс. все средства для этого есть. --- PS Thread.Abort не может прервать не-managed низкоуровневый код. может помочь в некотрых случаях внешнее закрытие хэндла устройства (файла), но не всегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 00:06 |
|
||
|
Вопрос по MultiThreading. Требуется помощь в уничтожении трэдов
|
|||
|---|---|---|---|
|
#18+
кузякак минимум 3 (три): собственно завершение, внутренний тайм-аут и внешний сброс. все средства для этого есть. Если можно, вы не могли бы вкратце об этих средствах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 00:31 |
|
||
|
Вопрос по MultiThreading. Требуется помощь в уничтожении трэдов
|
|||
|---|---|---|---|
|
#18+
когда работаешь с COM портом - открывай его с флагом FILE_FLAG_OVERLAPPED (0x40000000). все операции IO ReadFile/WriteFile должны использовать структуру OVERLAPPED и функцию GetOverlappedResult для проверки завершения. используй структуру NativeOverlapped для работы, в которую подставляешь хэндл ManualResetEvent события. PS overlapped не работает в CFW :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2005, 01:12 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=32917421&tid=1437274]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 221ms |
| total: | 367ms |

| 0 / 0 |
