|
Возможно ли реализовать такое в .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 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
ИзопропилSanta89у так что, моя идея с одним контроллом Time вобще отпадает чтоли? а контрол то здесь причём? Это который мышкой на форму кидают? нужен таймер - одна штука для запуска задач, тикающий раз в секунду, например. далее - расписание задач, запуск, отслеживание таймаутов и ошибок ЗЫ это один из вариантов.вообще таймер или диспатчертаймер не самые плохие варианты как по мне, тем более для такой задачи ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 00:53 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 09:38 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Santa89Еще одна задумка - создать только один универсальный таймер tmrTimer, отрабатывающий раз в минуту. Хранить в базе/памяти для каждого Comp[number] интервал обновления и время последнего пинга. Во время ежеминутного срабатывания tmrTimer_Tick делается проверка по всем данным для каждого такого Comp[number]. И если разница (current time - время последнего пинга Comp[number]) > чем нужный интервал обновления для этого Comp[number] - пингуем Comp[number], обновляем для него время последнего пинга текущим временем... ИМХУ удобнее хранить время следующего опроса сервиса - как наступило, опрос, расчет времени следующего опроса. PS Про асинхронный ввод/вывод можешь Рихтера почитать Глава 28. Асинхронные операции ввода-вывода. Или эту книгу ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 10:22 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Изопропил, Ну разницы помоему никакой, что я объект таймер создам программно, что я кину на форму WinControl Timer. Класс то один и тот же. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 13:23 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 13:38 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Santa89Изопропил, Ну разницы помоему никакой, что я объект таймер создам программно, что я кину на форму WinControl Timer. Класс то один и тот же. это самый несущественный момент. таймеры, кстати разными бывают. и к форме привязка далеко не всегда нужна. второкот правду написал 18901718 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 13:42 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Santa89Пинг машин - это как пример..В итоге данное приложение будет считывать данные с различных веб-сервисов. Только вот как это реализовать..чтобы ВебСервис1 читался каждую минут, ВебСервис2 каждые 15ть итд (вобщем интервал ставит сам пользователь через интерфейс) - непонятно... Тут уже предложили Quartz.NET ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2016, 13:59 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
Santa89Cat2, в реале не будет никакого пинга, будет чтение данных из нескольких веб-сервисов с разными интервалами сделайте класс, работающий с одним адресом, создавайте такие объекты с параметрами и пусть обращаются к сервисам ... |
|||
:
Нравится:
Не нравится:
|
|||
07.03.2016, 11:37 |
|
Возможно ли реализовать такое в .NET?
|
|||
---|---|---|---|
#18+
L.OtujktdSanta89Еще одна задумка - создать только один универсальный таймер tmrTimer, отрабатывающий раз в минуту. Хранить в базе/памяти для каждого Comp[number] интервал обновления и время последнего пинга. Во время ежеминутного срабатывания tmrTimer_Tick делается проверка по всем данным для каждого такого Comp[number]. И если разница (current time - время последнего пинга Comp[number]) > чем нужный интервал обновления для этого Comp[number] - пингуем Comp[number], обновляем для него время последнего пинга текущим временем... Не задохнется ли каждую минуту так отрабатывать? Можно заменить таймер на Thread.Sleep и делать многопоточную обработку. А лучше на Task.Delay, если версия .Net Framework позволяет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2016, 12:13 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1400746]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
63ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 181ms |
0 / 0 |