![]() |
|
|||||||
| Регистрация | Группы | FAQ's | Полезные ссылки | Баня | Участники | Календарь | Пометить все разделы прочитанными |
![]() |
|
|
Опции темы | Опции просмотра |
|
|
#1 |
|
Регистрация: 31-03-2007
Сообщений: 374
|
C# Как реализовать напоминание
Всем привет! Пишу программку что-то наподобие планировщика заданий. Хочу добавить в неё что-то вроде напоминаний, но не знаю как это корректно реализовать. Решил сделать в виде отдельного потока, который постоянно сверяет время начала задания с текущим и в случае сходства выдает напоминание на экран. По сути работает, но этот процесс грузит 50% cpu. Вот его незамысловатый код:
while (true) { if (count != 0) { for (int i=0; i<count; i++) { if (Form1.allTasks[i].startDate == DateTime.Now) { //Тут должно появиться окно с напоминанием! } } } } Причина впринципе понятна. Бесконечный цикл полюбому будет жутко грузить любой процессор. Но вот как реализовать эту штуковину по другому? Может кто-то сталкивался? |
|
|
|
|
|
#2 |
![]() ![]() ![]() ![]() |
ну так тупо всавь слип побольше
пусть сверяется раз ~ раз в минуту или тебе нужен планировщик на каждую долю секунды ![]()
__________________
the Tooth is out there |
|
|
|
|
|
#3 |
|
Регистрация: 31-03-2007
Сообщений: 374
|
В том то и дело что не нужен. Ты имеешь виду в тело цикла вставить? Попробую, спасибо за совет
|
|
|
|
|
|
#4 |
|
Регистрация: 31-03-2007
Сообщений: 374
|
Помогло. Hisp, огромное спасибо
![]() |
|
|
|
|
|
#5 |
![]() |
Блин, отдельный поток, слип...
А почему б просто таймер не заюзать?
__________________
|
|
|
|
|
|
#6 |
|
Регистрация: 31-03-2007
Сообщений: 374
|
А как по таймеру сверяться? Там можно дату сверить?
|
|
|
|
|
|
#7 |
|
Регистрация: 31-03-2007
Сообщений: 374
|
|
|
|
|
|
|
#8 |
|
Регистрация: 03-07-2006
Сообщений: 239
|
|
|
|
|
|
|
#9 | |
![]() |
Цитата:
void Timer1Tick(object sender, System.EventArgs e) { if (DateTime.Now >= timeToFire) { //выводим напоминание //... timer1.Enabled = False; } } типа того
__________________
|
|
|
|
|
|
|
#10 |
![]() ![]() ![]() ![]() ![]() |
оптимизация кода в реальном времени
![]()
__________________
Век наш таков, что он гордится машинами, умеющими думать, и побаивается людей, которые проявляют ту же способность... Харьков готик портал |
|
|
|
|
|
#11 |
|
|
Почти так.. Но ведь у тебя не одно задание..Создай событие.. В котором, будет очередь ожиданий, а реально заряжать таймер только на самое первое по времени задания. Это позволит не плодить "потоки".
__________________
ICQ 139070664 Моб. 8097 4548766 Life 8063 6392754 |
|
|
|
|
|
#12 | |
![]() |
Цитата:
Правда события друг от друга должны быть независимые, они ж вызываться будут в отфонарном порядке...
__________________
|
|
|
|
|
|
|
#13 |
|
Регистрация: 31-03-2007
Сообщений: 374
|
Спасибо всем за советы. С каждого взял по чуть-чуть
Реализовал с помощью таймера. Причем сделал его внутри моего класса "задача" как статический. Поэтому поток плодиться не будет. При создании новой задачи он стартует. Обработчик выполняется для всех задач. Там они перебираются и соответственно выводятся напоминания. А после напоминания я просто определяю есть ли ещё задачи, если нет то я останавливаю таймер. А как только создаю новую он опять соответственно стартует и т.д. Вобщем всё довольно неплохо получилось. Ещё раз спасибо всем. |
|
|
|