Название: Как поймать исключение? Отправлено: niXman от Март 24, 2010, 03:55 Есть поток. В методе run() некоторый код, который, возможно бросает исключение.
В данный момент, без "try {} catch () {}" блока, программа падает. Ну и пусть. Но! В объекте исключения содержится информация о причине его возникновения. Ее, очень нужно отобразить. Чтоб юзер не бился в догадках о причине падения. Пробовал так, не ловит. Код
Название: Re: Как поймать исключение? Отправлено: kramer3d от Март 24, 2010, 07:17 Ловить, очевидно, нужно в самом методе run(), ведь у него собственный стек, отделенный от стека основного потока.
Название: Re: Как поймать исключение? Отправлено: niXman от Март 24, 2010, 07:48 Цитировать Ловить, очевидно, нужно в самом методе run(), ведь у него собственный стек, отделенный от стека основного потока. это понятно.но бустовые исключения межпоточные. если реализовать по аналогии поток на boost::thread, то межпоточность работает. а вот с Qtешными потоками нет. наверное все же дело в том, что у Qtешных потоков есть свой цикл сообщений. или еще в чем-то.. Название: Re: Как поймать исключение? Отправлено: BRE от Март 24, 2010, 08:12 Ее, очень нужно отобразить. Чтоб юзер не бился в догадках о причине падения. Можно попробовать, при ошибке в run() - останавливать поток (т.е. выходить из рабочего цикла) и посылать сигнал о ошибке (в качестве аргумента использовать код или строку с описанием проблемы).А в главном потоке, ловить этот сигнал и сообщать пользователю причины. Название: Re: Как поймать исключение? Отправлено: Rcus от Март 24, 2010, 08:20 В Qt уже есть поддержка передачи исключений между потоками выполнения, но не в QThread, а в QtConcurrent, \see QtConcurrent::Exception
Название: Re: Как поймать исключение? Отправлено: kramer3d от Март 24, 2010, 11:45 но бустовые исключения межпоточные. если реализовать по аналогии поток на boost::thread, то межпоточность работает. а вот с Qtешными потоками нет. наверное все же дело в том, что у Qtешных потоков есть свой цикл сообщений. или еще в чем-то.. Т.е. вы хотите сказать, что в бусте можно бросить исключение в одном потоке, а поймать в другом? Название: Re: Как поймать исключение? Отправлено: niXman от Март 24, 2010, 21:22 kramer3d, вы верно заметили, это я не правильно понял из бустовской документации.
просто в данный момент, задался целью, разобраться с boost.exceptions и применением оного к межпоточной обработке. почитав по этому поводу, понял, что не все так просто. Название: Re: Как поймать исключение? Отправлено: niXman от Март 24, 2010, 21:24 Цитировать но бустовые исключения межпоточные. если реализовать по аналогии поток на boost::thread, то межпоточность работает. поторопился с выводами ::) |