|
|
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
Всем доброе время суток. Есть пул потоков, которым управляет главный поток. Возникают ситуации, когда в одном из потоков возникает исключение, о котором стоит сообщить главному потоку. Вариант - когда главный поток постоянно оглядываецца не "упал" ли кто - не подходит. Как сообщить главному потоку об исключении? Есть подозрения что никак :(. Какие есть мысли у народа? Спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 13:02 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
1. Сохранять информацию о ошибке где-либо и из главного потока опрашивать состояние этого "где-либо" 2. Если в главный покоток можно посылать сообщения (к примеру используется паттерн Command - тогда просто слать сообщение с полной информацией о ошибке :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 13:27 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
vndovr1. Сохранять информацию о ошибке где-либо и из главного потока опрашивать состояние этого "где-либо" 2. Если в главный покоток можно посылать сообщения (к примеру используется паттерн Command - тогда просто слать сообщение с полной информацией о ошибке :) 1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :( 2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 14:03 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
Jozic1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :( 2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :( 2 - передавать в родительский поток ссылку на главный и вызывать метод главного (в котором будет регестрироваться ошибка) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 14:31 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
он же Jozic1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :( 2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :( 2 - передавать в родительский поток ссылку на главный и вызывать метод главного (в котором будет регестрироваться ошибка) +1 только лучше передавать какой то другой объект (handler). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 15:01 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
Jozic vndovr1. Сохранять информацию о ошибке где-либо и из главного потока опрашивать состояние этого "где-либо" 2. Если в главный покоток можно посылать сообщения (к примеру используется паттерн Command - тогда просто слать сообщение с полной информацией о ошибке :) 1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :( 2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :( А чем не устраивает вариант с нотификацией? Передавай главному потоку к примеру ID дочернего потока и эксепшен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 15:20 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
AndreySerj Jozic vndovr1. Сохранять информацию о ошибке где-либо и из главного потока опрашивать состояние этого "где-либо" 2. Если в главный покоток можно посылать сообщения (к примеру используется паттерн Command - тогда просто слать сообщение с полной информацией о ошибке :) 1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :( 2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :( А чем не устраивает вариант с нотификацией? Передавай главному потоку к примеру ID дочернего потока и эксепшен. PS. Я имею ввиду шаблон Observer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 15:23 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
он же Jozic1. Вариант который первым приходит в голову, но хотелось бы более красивого решения, хотя подозреваю его нет :( 2. Даже не подозреваю как послать сообщение в главный поток, кроме нотификаций :( 2 - передавать в родительский поток ссылку на главный и вызывать метод главного (в котором будет регестрироваться ошибка)Немного не понятно, можно разъяснить? и лучше с кусочком кода :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 16:07 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
AndreySerjА чем не устраивает вариант с нотификацией?Вариант с вейт/нотифай означает, что главный поток будет ждать нотификейшн а не выполняцца, а хочецца все же многопоточности. AndreySerjПередавай главному потоку к примеру ID дочернего потока и эксепшен.Как? пример если не затруднит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 16:13 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 16:17 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
Jozic AndreySerjА чем не устраивает вариант с нотификацией?Вариант с вейт/нотифай означает, что главный поток будет ждать нотификейшн а не выполняцца, а хочецца все же многопоточности. AndreySerjПередавай главному потоку к примеру ID дочернего потока и эксепшен.Как? пример если не затруднит. Я имел ввиду не wait/notify .... Я хотел сказать следующее: нотифицировать главный поток сообщением от дочерних потоков, когда у них происходит эксепшен, в стиле паттерна Observer. Очень схематично типа так: interface Listener { void actionPerformed(int id, Exception e); } class MainThread implements Listener { int count = 0; void actionPerformed(int id, Exception e) { processException(); } void runNewChildThread() { ChildThread ch = new ChildThread(++count); ch.setListener(this); ch.start(); } ......... } class ChildThread extends Thread { int id; Listener listener; puclic ChildThread(int id) { this.id = id; } void setListener(Listener listener) { this.listener = listener; } ..... здесь эксэпшен -> } catch(Exception e) { listener.actionPerformed(id, e); .... } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 16:48 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
Timm Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. метод onException выполницца в потоке, который вызвал исключение, а родительский поток который стартовал поток с исключением, продолжит работу как не в чем не бывало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 17:23 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
AndreySerj Jozic AndreySerjА чем не устраивает вариант с нотификацией?Вариант с вейт/нотифай означает, что главный поток будет ждать нотификейшн а не выполняцца, а хочецца все же многопоточности. AndreySerjПередавай главному потоку к примеру ID дочернего потока и эксепшен.Как? пример если не затруднит. Я имел ввиду не wait/notify .... Я хотел сказать следующее: нотифицировать главный поток сообщением от дочерних потоков, когда у них происходит эксепшен, в стиле паттерна Observer. Очень схематично типа так: ... Это тоже не работает, вы путатет класс Thread и поток выполнения. Если метод объявлен в классе SuperThread, это не значит что он выполницца только в потоке, который создацца с помощью этого класса. смотрите мой предыдущий пост. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 17:26 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
Jozic Timm Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. неа. я здесь писал. JozicКак сообщить главному потоку об исключении? Jozicметод onException выполницца в потоке, который вызвал исключение, а родительский поток который стартовал поток с исключением, продолжит работу как не в чем не бывало проясните тогда че означает "сообщить главному потоку". лучше пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 17:40 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
Timmпроясните тогда че означает "сообщить главному потоку". лучше пример. :) Я и спросил КАК? имелось ввиду не как реализовать а вообще, может кто сталкивался: JozicКак сообщить главному потоку об исключении? Есть подозрения что никак :(. Какие есть мысли у народа? Если бы знал, не спрашивал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 17:46 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
А сто собственно делает родительский поток? Может все-таки он и должен все время следить, например, за какой-то очередью, в которую кладут сообщения об исключении дочерние потоки. Тогда обработка исключений будет происходить в родительском потоке, а дочерние будут только добавлять их в очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 18:15 |
|
||
|
Multi-Threaded Exception Handling
|
|||
|---|---|---|---|
|
#18+
AciD_vА сто собственно делает родительский поток? Ну к примеру, один поток (пусть родительский) инитит громоздкий ГУЙ, а второй (порожденный) пытаецца получить коннекшн к базе. Допустим сервер лежит - "кина не будет", ну и тут хотелось бы сказать родительскому потоку, который все еще усердно инитит ГУЙ, что все это он зря. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 19:07 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=33848742&tid=2148697]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 441ms |

| 0 / 0 |
