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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: Потоки при параллельном тестировании оборудования  (Прочитано 17047 раз)
Bepec
Гость
« Ответ #15 : Август 22, 2012, 14:18 »

Что мешает вам самим в потоках проверять время выполнения ваших же функций? Что мешает поставить стража на остановку?

PS или я чего то незнаю, или я чего т не понимаю Улыбающийся
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #16 : Август 22, 2012, 14:27 »

У него висит вовремя выполнения чужих функций из драйверов устройств. Типа readData() - и на ней нитка и умерла. И прервать этот самый readData не получается.
Записан
Odyssey
Гость
« Ответ #17 : Август 22, 2012, 14:34 »

xokc прав - примерно это и происходит.
А как реализовать "стража"?
Записан
Bepec
Гость
« Ответ #18 : Август 22, 2012, 14:37 »

Страж = булевский флаг, но в зависоне он бесполезен.

Если такая ситуация, то отдельные процессы - это простое и вместе с тем хорошее решение. Никаких забот о мусоре и прочем. Отработал и прислал данные - молодец. Работает 2 часа подряд - убил процесс и усё нормально, выдал ошибку юзверю.
Записан
Odyssey
Гость
« Ответ #19 : Август 22, 2012, 14:45 »

Скажите, а если грохнуть класс-наследник delet'ом, а после вызвать какой-нибудь "уборщик"?
Так если он висит то грохнуть можно только из др нитки - верный краш

Да, грохаем из другой нитки. Правда, я надеялся, что в деструкторе можно будет освободить какие-нибудь переменные, порт закрыть, не? ^___^

Вы, кстати, согласны, что при зависе надежнее работать с процессами, а не с потоками?
Записан
Odyssey
Гость
« Ответ #20 : Август 22, 2012, 14:46 »

Страж = булевский флаг, но в зависоне он бесполезен.

Если такая ситуация, то отдельные процессы - это простое и вместе с тем хорошее решение. Никаких забот о мусоре и прочем. Отработал и прислал данные - молодец. Работает 2 часа подряд - убил процесс и усё нормально, выдал ошибку юзверю.

Спасибо. Надо будет обмозговать и рассмотреть возможность реализации Улыбающийся
Записан
Bepec
Гость
« Ответ #21 : Август 22, 2012, 14:55 »

Поток, грохнутый terminate продолжает работать ещё некоторое время. В некоторых случаях (у меня было) он продолжает писать данные, при этом вроде - бы являясь уже убитым Веселый Чуть не поседел, пока искал среди 2 потоков ошибку, а третий, убитый, весело менял им данные и грохал программу Веселый
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Август 22, 2012, 15:16 »

Да, грохаем из другой нитки. Правда, я надеялся, что в деструкторе можно будет освободить какие-нибудь переменные, порт закрыть, не? ^___^
Вызов delete не прервет выполнение нитки нормально "зато" искалечит данные к которым она обратится

Вы, кстати, согласны, что при зависе надежнее работать с процессами, а не с потоками?
Ну это решение просто "потому что нет нормального", всем понятно что оно "через задницу". Я бы прорывался через дуст о котором высокого мнения - хотя и редко его использовал
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #23 : Август 22, 2012, 15:35 »

Я бы прорывался через дуст о котором высокого мнения - хотя и редко его использовал
А чем это может помочь прервать зависший вызов?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #24 : Август 22, 2012, 15:46 »

Я бы прорывался через дуст о котором высокого мнения - хотя и редко его использовал
А чем это может помочь прервать зависший вызов?
Нитка получит исключение и тогда сможет легально выйти
Записан
Bepec
Гость
« Ответ #25 : Август 22, 2012, 15:51 »

Эммм... А откуда она получит исключение?

Я просто не особо осведомлён о возможностях "дуста", но как он может по результату проверки (долгое время выполнения и прочая лабуда типа устройство зациклилось) выдать ексцепшн до окончания обработки вызова?
Записан
Odyssey
Гость
« Ответ #26 : Август 22, 2012, 15:53 »

Я пока вынужден работать на Qt 4.5.3 под слегка подуродованную версию Линукс (правда, скоро возможен переход на 4.8.2). Boost там работать станет?

И винюсь - пока не очень разобрался в принципе действия. Классу кто-то извне кинет исключение?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Август 22, 2012, 16:17 »

Я пока вынужден работать на Qt 4.5.3 под слегка подуродованную версию Линукс (правда, скоро возможен переход на 4.8.2). Boost там работать станет?
Не знаю. Я просто скопировал фолдер дуста, добавил путь в проект и все, с пол-пинка пошло и на Mac и на Вындоуз.

И винюсь - пока не очень разобрался в принципе действия. Классу кто-то извне кинет исключение?
Смысл что если нитка получит исключение - она попадет на Ваш catch, там и зачищайтесь и цивильно выходите. Слышал предлагают это даже добавить в стандарт языка - именно по тем соображениям что Вы изложили (борьба с зависоном). Хз, может в С++ 11 уже добавили (где же эрудиты когда они нужны) Непонимающий

Сам не делал (пока не припекло) но присматривался - это есть в Вындоуз (но это 1 платформа) и в дусте.  
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #28 : Август 22, 2012, 16:37 »

Классу кто-то извне кинет исключение?
Смысл что если нитка получит исключение - она попадет на Ваш catch, там и зачищайтесь и цивильно выходите.
Давайте еще раз. Внутри метода run в наследнике QThread "завис" метод read из чужой dll. Завис тупо - без таймаутов и exception. Кто в этом случает сгенерит это самое исключение, которое потом будет передано через boost основному потоку?
Записан
Bepec
Гость
« Ответ #29 : Август 22, 2012, 16:41 »

Igors, ловля исключения даже чужого реализована в С++. Это банальный try/catch.

Но оно работает, если в чужом коде кто-то его бросает. А если чужой код завис к чертям, то не поможет уже ничего :/

Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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