|
|
|
Задание ограничения по времени на выполнение функции
|
|||
|---|---|---|---|
|
#18+
Есть код: private String[] doCurrentTask(Task at) throws Exception { try { String[] result = null; result = at.perform(); } catch(Exception e) { log("error in doing current task " + e.getMessage()); throw e; } return result; } Функция at.perform() может выполняться очень долго или код в ней может зациклиться. Необходимо, чтобы была возможность сделать ограничение на выполнение at.perform(), скажем N секунд и если не выполнилась, то result = null. Класс Task - интерфейс и его реализации я менять не могу. Возможно ли такое сделать в Java? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 22:20 |
|
||
|
Задание ограничения по времени на выполнение функции
|
|||
|---|---|---|---|
|
#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. --С уважением, ponomarevvb-- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2004, 23:38 |
|
||
|
Задание ограничения по времени на выполнение функции
|
|||
|---|---|---|---|
|
#18+
По поводу Task.interrupt() - зависит во многом от класса Task, точнее от его функции perform. 1. Если он сам порождает потоки, то они не будут убиты. 2. Сам поток получит InterruptedException при вызове interrupt только если он стоит в режиме ожидания по wait, sleep, join. В противном случае он прерван не будет, поменяется статус, но объекту Task это все равно. Но если убивать поток не требуется, а просто свалится по timeout - никаких проблем. Просто mainTask.join(WAIT_TIME) - и по окончанию проверить есть данные обработки или нет. Timer здесь не нужет - он выполняется асинхронно. После schedule сразу же перейдешь на if (interrupted) {...} - в любом случае нужно ожидание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 02:14 |
|
||
|
Задание ограничения по времени на выполнение функции
|
|||
|---|---|---|---|
|
#18+
По поводу: 1) Thread mainTask = new Thread { public void run() { result = at.perform(); } } at - я могу обьявить final, а как же по поводу result? 2) По поводу Task.interrupt() - зависит во многом от класса Task, точнее от его функции perform. 1. Если он сам порождает потоки, то они не будут убиты. 2. Сам поток получит InterruptedException при вызове interrupt только если он стоит в режиме ожидания по wait, sleep, join. В противном случае он прерван не будет, поменяется статус, но объекту Task это все равно. Но если убивать поток не требуется, а просто свалится по timeout - никаких проблем. Просто mainTask.join(WAIT_TIME) - и по окончанию проверить есть данные обработки или нет. Timer здесь не нужет - он выполняется асинхронно. После schedule сразу же перейдешь на if (interrupted) {...} - в любом случае нужно ожидание Если Task сам порождает потоки, то возможно ли как-то и их убить? Что значит: 2. Сам поток получит InterruptedException при вызове interrupt только если он стоит в режиме ожидания по wait, sleep, join. В противном случае он прерван не будет, поменяется статус, но объекту Task это все равно. Что разве interrupt может и не прервать поток? Может destroy поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 11:35 |
|
||
|
Задание ограничения по времени на выполнение функции
|
|||
|---|---|---|---|
|
#18+
откуда взято - не помню, некий класс работы с модемом здесь - метод sendATCommand(f_cmd, f_rsp) может выполняться долго Код: 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. 43. 44. 45. 46. 47. 48. -- FUCK THE iNET!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 11:53 |
|
||
|
Задание ограничения по времени на выполнение функции
|
|||
|---|---|---|---|
|
#18+
2 Mitya, А.Грасоff™ http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html#interrupt() Здесь подробнее. Прерван поток будет только если он в состроянии блокировки, ожидания при IO. В остальных случаях - нет. Т.е. к примеру пустой цикл while (true) {} прерван не будет. Последний пример - это ввод/вывод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2004, 15:30 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=32808519&tid=2153333]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 349ms |

| 0 / 0 |
