|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Есть WinForms приложение. Его функционал (к примеру) - пинг машин в корпоративном домене. И вот пользователь создал в приложении два объекта для пинга - Comp1 и Comp2. Самое главная особенность - программа должна давать пользователю выбор - через какой интвервал какую машину нужно пинговать. К примеру доступность Comp1 пользователь хочет мониторить раз в минуту, а доступность Comp2 - раз в 15 минут. Как это реализовать на .NET? Создавать для каждого очередного Comp[number] объект Timer программно? Но как тогда при этом создать для каждого такого нового Timer'а событие Timer_Tick? И не просто Timer_Tick, а Timer_Comp(конкретный номер)_Tick... В общем, пока смутно себе это представляю и что то совсем зарылся.. Возможно кто то уже сталкивался с такой задачей, большая просьба помочь или хотя бы натолкнуть на мысль - куда копать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 20:23 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Запускаешь ping.exe, читаешь что он выводит и парсишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 20:31 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Dima TЗапускаешь ping.exe, читаешь что он выводит и парсишь. это по юниксовому будет :) ----------- таймер один, можно ежесекундный, запросы посылать асинхронно (Ping.SendAsync), при неудаче несколько попыток делать ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 20:35 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Пинг машин - это как пример..В итоге данное приложение будет считывать данные с различных веб-сервисов. Только вот как это реализовать..чтобы ВебСервис1 читался каждую минут, ВебСервис2 каждые 15ть итд (вобщем интервал ставит сам пользователь через интерфейс) - непонятно... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 20:43 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
С dispatch timer может сработать такая задумка? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 20:47 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Еще одна задумка - создать только один универсальный таймер tmrTimer, отрабатывающий раз в минуту. Хранить в базе/памяти для каждого Comp[number] интервал обновления и время последнего пинга. Во время ежеминутного срабатывания tmrTimer_Tick делается проверка по всем данным для каждого такого Comp[number]. И если разница (current time - время последнего пинга Comp[number]) > чем нужный интервал обновления для этого Comp[number] - пингуем Comp[number], обновляем для него время последнего пинга текущим временем... Не задохнется ли каждую минуту так отрабатывать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:17 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Так примерно Код: c# 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. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:19 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Cat2 Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:23 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Хранить для объекта время следующего вызова его функционала и интервал(1 минута к примеру).По таймеру с таймаутом гораздо меньше самого маленького интервала проверять на соответствии текущего времени для всех объектов и времени планируемого следующего вызова. В случае совпадения дергаем функционал и смещаем время следующей проверки на значение интервала. Должно работать. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:25 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
L.Otujktd, правильно ли понимаю, это тоже самое что и я выше написал? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:27 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Cat2, Супер! Сейчас испробую... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:28 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Santa89Не задохнется ли каждую минуту так отрабатывать? Может да, а может - нет. Пробовать надо. Нечто аналогичное на шестистах вызовах у меня сдыхало ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:30 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Santa89Еще одна задумка - создать только один универсальный таймер tmrTimer, отрабатывающий раз в минуту. Хранить в базе/памяти для каждого Comp[number] интервал обновления и время последнего пинга. Во время ежеминутного срабатывания tmrTimer_Tick делается проверка по всем данным для каждого такого Comp[number]. И если разница (current time - время последнего пинга Comp[number]) > чем нужный интервал обновления для этого Comp[number] - пингуем Comp[number], обновляем для него время последнего пинга текущим временем... Не задохнется ли каждую минуту так отрабатывать? Можно заменить таймер на Thread.Sleep и делать многопоточную обработку. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:33 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Cat2, ну будем тестить. в реале будет примерно штук 20-30 таких Comp[number] которых нужно будет мониторить в разные интервалы. отклик (то, что в я в топике называл пингом) у них будет быстрый - меньше одной секунды. правда при этом еще и запись в базу о времени каждого пинга по каждому объекту будет.. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:35 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Santa89в реале будет примерно штук 20-30 таких Comp[number Тогда потянет. Возможно в этом случае совет Изоприла про Ping.SendAsync будет даже лучше ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:41 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
чем использование Task ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:42 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Cat2, в реале не будет никакого пинга, будет чтение данных из нескольких веб-сервисов с разными интервалами ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:46 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
А если список CompInterval модифицируется в процессе работы? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:51 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
L.OtujktdА если список CompInterval модифицируется в процессе работы? Это только пример. Реально я бы считывал его из БД внутри Timer_Elapsed ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 21:53 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Santa89Cat2, в реале не будет никакого пинга, будет чтение данных из нескольких веб-сервисов с разными интервалами Ну что сказать. Вы стали на шаткую дорожку сетевого взаимодействия У Вас впереди множество ошибок, разочарований в декларируемых возможностях сетевых инструментов и побед над ними. Желаю удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 22:05 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
L.OtujktdSanta89Еще одна задумка - создать только один универсальный таймер tmrTimer, отрабатывающий раз в минуту. Хранить в базе/памяти для каждого Comp[number] интервал обновления и время последнего пинга. Во время ежеминутного срабатывания tmrTimer_Tick делается проверка по всем данным для каждого такого Comp[number]. И если разница (current time - время последнего пинга Comp[number]) > чем нужный интервал обновления для этого Comp[number] - пингуем Comp[number], обновляем для него время последнего пинга текущим временем... Не задохнется ли каждую минуту так отрабатывать? Можно заменить таймер на Thread.Sleep и делать многопоточную обработку. только лучше использовать await Task.Delay() или Task.Delay().Wait() ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 22:05 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
L.OtujktdМожно заменить таймер на Thread.Sleep и делать многопоточную обработку. Thread.Sleep можно использовать только для отладки приложения, в виде заглушки для пока нереализованных функций. В остальных случаях надо использовать или асинхронные вызовы или таски. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 22:56 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Cat2L.OtujktdМожно заменить таймер на Thread.Sleep и делать многопоточную обработку. Thread.Sleep можно использовать только для отладки приложения, в виде заглушки для пока нереализованных функций. В остальных случаях надо использовать или асинхронные вызовы или таски. +127 никакой рукопашной многопоточки и слипа ... |
|||
:
Нравится:
Не нравится:
|
|||
05.03.2016, 23:52 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Ну так что, моя идея с одним контроллом Time вобще отпадает чтоли? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 00:22 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Santa89у так что, моя идея с одним контроллом Time вобще отпадает чтоли? а контрол то здесь причём? Это который мышкой на форму кидают? нужен таймер - одна штука для запуска задач, тикающий раз в секунду, например. далее - расписание задач, запуск, отслеживание таймаутов и ошибок ЗЫ это один из вариантов. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 00:39 |
|
|
start [/forum/search_topic.php?author=%D0%A1%D1%82%D0%B0%D0%BC%D0%B5%D1%81%D0%BA%D0%B0&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 25ms |
total: | 185ms |
0 / 0 |