Организация алгоритма программы
Имею немного опыта в программировании.
Столкнулся с такой задачкой:
необходимо каждые несколько минут (количество минут задается) запускать некую задачу.
Вот думаю как это реализовать.
Как вариант для каждой задачи создавать таймер и в него передавать интервал. При срабатывании таймера запускается задача, и так по кругу.
Вроде все гуд, но вытекает вопрос:
имея например 100 таймеров, будет ли это отбирать ресурсы машины и сколько, вообще правильный алгоритм?
За любые ответы и подсказки заранее благодарю!
Имею немного опыта в программировании.
Столкнулся с такой задачкой:
необходимо каждые несколько минут (количество минут задается) запускать некую задачу.
Вот думаю как это реализовать.
Как вариант для каждой задачи создавать таймер и в него передавать интервал. При срабатывании таймера запускается задача, и так по кругу.
Вроде все гуд, но вытекает вопрос:
имея например 100 таймеров, будет ли это отбирать ресурсы машины и сколько, вообще правильный алгоритм?
За любые ответы и подсказки заранее благодарю!
в цикле запускать задачу, поместить в цикл слип на промежуток времени который тебе нужен. производительно зависит от нужд запускаемой задачи. а вообще все вами написанное пахнет керосином. такие извращенческие задачи и решения в большинстве своем возникают из за не верного понимания и анализа проблемы.
суть паттерна вот в чём: имеется поток который однажды запустившись считывает из очереди очередную задачу (т.е. ближайшую по времени для запуска), определяет время запуска задачи, засыпает (используя sleep()), затем просыпается, стартует задачу в отдельн. потоке и извлекает из очереди следующую
(здесь можно посмотреть примеры:
http://www.albahari.com/threading/part4.aspx
http://yacsharpblog.blogspot.com/2008/09/simple-task-queue.html)
П.С.конечно если задач окажется слишком много то это всё равно может нагрузить машину -- придётся вводить разумные ограничения
суть паттерна вот в чём: имеется поток который однажды запустившись считывает из очереди очередную задачу (т.е. ближайшую по времени для запуска), определяет время запуска задачи, засыпает (используя sleep()), затем просыпается, стартует задачу в отдельн. потоке и извлекает из очереди следующую
(здесь можно посмотреть примеры:
http://www.albahari.com/threading/part4.aspx
http://yacsharpblog.blogspot.com/2008/09/simple-task-queue.html)
П.С.конечно если задач окажется слишком много то это всё равно может нагрузить машину -- придётся вводить разумные ограничения
чем этот патерн отличается от расписанного мной выше решения? ну за исключение очереди задач, так как тут это не нужно, бо задачи однородны.
идея со слипом интересная, но слип же замораживает все приложение, это что каждый цикл в отдельном потоке пускать?
По поводу керосина - люди же не рождаются умелыми и опытными), все приходит со временем, для этого и существуют форумы, сообщества, чтоб направить, поправить, подсказать и т.д.
И еще, я же не буду запускать 9 задач по конверту видео и десятую запуск сталкера :D
по поводу анализа задачи.
Ну вот есть задача что то типа менеджера задач - задача это путь к запускаемому файлу и параметры запуска, и периодичность запуска.
суть паттерна вот в чём: имеется поток который однажды запустившись считывает из очереди очередную задачу (т.е. ближайшую по времени для запуска), определяет время запуска задачи, засыпает (используя sleep()), затем просыпается, стартует задачу в отдельн. потоке и извлекает из очереди следующую
(здесь можно посмотреть примеры:
http://www.albahari.com/threading/part4.aspx
http://yacsharpblog.blogspot.com/2008/09/simple-task-queue.html)
П.С.конечно если задач окажется слишком много то это всё равно может нагрузить машину -- придётся вводить разумные ограничения
интересно, не знал такого, спасиб, покуру в эту сторону...
необходимо каждые несколько минут (количество минут задается) запускать некую задачу.
System.Threading.Timer вам поможет. Хватит изобретать велосипеды, которые Микрософт уже давно реализовал в ОС.
По поводу керосина - люди же не рождаются умелыми и опытными), все приходит со временем, для этого и существуют форумы, сообщества, чтоб направить, поправить, подсказать и т.д.
И еще, я же не буду запускать 9 задач по конверту видео и десятую запуск сталкера :D
по поводу анализа задачи.
Ну вот есть задача что то типа менеджера задач - задача это путь к запускаемому файлу и параметры запуска, и периодичность запуска.
слип морозит текущий поток, на другие потоки и процессы он не влияет, если в цикле запускаешь потоки\процессы, то слип в оном цикле на выполнение запущенных(дочерних) потоков\процессов не повлияет.