![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
SmartBye |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 15.5.2008 Репутация: нет Всего: нет |
Проблема довольно абстрактная, вот только не знаю, как лучшее ее решить.
Есть некоторый список (не List, а абстрактный список) Каждый элемент которого нужно обработать в определенное время, закрепленное за этим элементом. Долго думал, как решить этот вопрос, надумалось только два решения, но, на мой взгляд они не очень совета: 1. Я пишу некоторый класс-менеджер, в котором хранится этот список (отсортированный по времени). Затем каждую секунду опрашиваю его из какого-то внешнего возбудителя (скажем, это будет Timer в WinForms) на предмет не пришло ли время первого события, т.е. то, которое имеет ближайшее время. Если пришло, то менеджер передает обработку этого элемента обработчику и выкидывает из списка (или ставит в конец) и таким же образом ожидаю времени следующего события. Тут мне видятся такие проблемы:
Задача вроде бы тривиальная, но вот выбрать приемлемый способ ее реализации не могу. |
|||
|
||||
nmn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 593 Регистрация: 26.11.2005 Репутация: 1 Всего: 1 |
ну как вариант, ничего плохого в принципе нет, синхронизацию только нужно правильно сделать еще как вариант использовать Timer (хоть из Threading, хоть из WinForms), и после каждой обработки менять значение интервала, так чтобы в нужное время этот таймер сработал для следующего элемента |
|||
|
||||
SmartBye |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 15.5.2008 Репутация: нет Всего: нет |
Т.е. второй способ будет наиболее оптимальный? Или лучше использовать таймер из потоков?
|
|||
|
||||
nmn |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 593 Регистрация: 26.11.2005 Репутация: 1 Всего: 1 |
тут зависит от специфики задачи, в частности как часто необходимо обрабатывать, как долго будет происходить обработка, что происходит во время обработки
если использовать Timer из WinForms, то тут нет проблем с синхронизацией (событие выполняется в том же потоке что и форма), но если обработка будет занимать много времени, то UI приложения будет подвисать использование собственного потока и Threading.Timer примерно одинкаово, но если время на обработку одного элемента превысит время ожидания до обработки следующего потока, то Timer cоздаст новый поток, а при использовании собственного потока будет запаздывание (как поезд, если будет стоять на одной станции слишком долго то на следующую он прибудет с опазданием), так что если обработка элемента операция независимая то предпочтительнее использовать таймер, если зависит от обработки предыдущих элементов, то собственный поток и конечно нельзя забывать о синхронизации при доступе к разделяемым ресурсам |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |