| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Обработка списка в заданное время. |
| Автор: SmartBye 14.9.2010, 18:40 |
| Проблема довольно абстрактная, вот только не знаю, как лучшее ее решить. Есть некоторый список (не List, а абстрактный список) Каждый элемент которого нужно обработать в определенное время, закрепленное за этим элементом. Долго думал, как решить этот вопрос, надумалось только два решения, но, на мой взгляд они не очень совета: 1. Я пишу некоторый класс-менеджер, в котором хранится этот список (отсортированный по времени). Затем каждую секунду опрашиваю его из какого-то внешнего возбудителя (скажем, это будет Timer в WinForms) на предмет не пришло ли время первого события, т.е. то, которое имеет ближайшее время. Если пришло, то менеджер передает обработку этого элемента обработчику и выкидывает из списка (или ставит в конец) и таким же образом ожидаю времени следующего события. Тут мне видятся такие проблемы:
Задача вроде бы тривиальная, но вот выбрать приемлемый способ ее реализации не могу. |
| Автор: SmartBye 15.9.2010, 10:52 |
| Т.е. второй способ будет наиболее оптимальный? Или лучше использовать таймер из потоков? |
| Автор: nmn 15.9.2010, 14:43 |
| тут зависит от специфики задачи, в частности как часто необходимо обрабатывать, как долго будет происходить обработка, что происходит во время обработки если использовать Timer из WinForms, то тут нет проблем с синхронизацией (событие выполняется в том же потоке что и форма), но если обработка будет занимать много времени, то UI приложения будет подвисать использование собственного потока и Threading.Timer примерно одинкаово, но если время на обработку одного элемента превысит время ожидания до обработки следующего потока, то Timer cоздаст новый поток, а при использовании собственного потока будет запаздывание (как поезд, если будет стоять на одной станции слишком долго то на следующую он прибудет с опазданием), так что если обработка элемента операция независимая то предпочтительнее использовать таймер, если зависит от обработки предыдущих элементов, то собственный поток и конечно нельзя забывать о синхронизации при доступе к разделяемым ресурсам |