Реклама на сайте


Харьковский сайт знакомств «Познакомлюсь»
Олег, 29 Харьков
Олег, 29
Харьков
Инесса, 24 Харьков
Инесса, 24
Харьков
Оксана, 27 Харьков
Оксана, 27
Харьков
Инна, 21 Харьков
Инна, 21
Харьков
Ferre, 38 Харьков
Ferre, 38
Харьков
Зоя, 26 Харьков
Зоя, 26
Харьков
Коша, 24 Харьков
Коша, 24
Харьков
Елена, 21 Харьков
Елена, 21
Харьков
Сергей, 34 Харьков
Сергей, 34
Харьков
Бидо, 29 Харьков
Бидо, 29
Харьков
Маy, 45 Харьков
Маy, 45
Харьков
Жорж, 77 Харьков
Жорж, 77
Харьков
Надя, 24 Харьков
Надя, 24
Харьков
Татьяна, 35 Харьков
Татьяна, 35
Харьков
Аlёsька, 18 Харьков
Аlёsька, 18
Харьков

Харьков Форум  

Вернуться   Харьков Форум > Hi-Tech... > Софт
Регистрация Группы FAQ's Полезные ссылки Баня Участники Календарь Пометить все разделы прочитанными

Ответ
 
Опции темы Опции просмотра
старое сообщение 07-07-2008, 09:41   #1
Kvest
 
 
Аватар для Kvest
 
Регистрация: 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)
{
//Тут должно появиться окно с напоминанием!
}
}
}

}

Причина впринципе понятна. Бесконечный цикл полюбому будет жутко грузить любой процессор. Но вот как реализовать эту штуковину по другому? Может кто-то сталкивался?
Kvest на форуме. не работает!   Ответить с цитированием
старое сообщение 07-07-2008, 09:48   #2
Hisp
 
 
Аватар для Hisp
 
Регистрация: 14-05-2008
Местоположение: CD 20
Сообщений: 4,766
  Отправить сообщение для  Hisp с помощью ICQ
ну так тупо всавь слип побольше
пусть сверяется раз ~ раз в минуту
или тебе нужен планировщик на каждую долю секунды
__________________

the Tooth is out there
Hisp'а на форуме нет :(   Ответить с цитированием
старое сообщение 07-07-2008, 10:42   #3
Kvest
 
 
Аватар для Kvest
 
Регистрация: 31-03-2007
Сообщений: 374
 
В том то и дело что не нужен. Ты имеешь виду в тело цикла вставить? Попробую, спасибо за совет
Kvest на форуме. не работает!   Ответить с цитированием
старое сообщение 07-07-2008, 10:46   #4
Kvest
 
 
Аватар для Kvest
 
Регистрация: 31-03-2007
Сообщений: 374
 
Помогло. Hisp, огромное спасибо
Kvest на форуме. не работает!   Ответить с цитированием
старое сообщение 07-07-2008, 13:41   #5
Skyggedans
 
 
Аватар для Skyggedans
 
Регистрация: 20-04-2006
Местоположение: 19 Döbkinstraße, Kernesburg am Feldmannfluß
Сообщений: 1,924
  Отправить сообщение для  Skyggedans с помощью ICQ
Блин, отдельный поток, слип...
А почему б просто таймер не заюзать?
__________________
Skyggedans на форуме. не работает!   Ответить с цитированием
старое сообщение 07-07-2008, 14:39   #6
Kvest
 
 
Аватар для Kvest
 
Регистрация: 31-03-2007
Сообщений: 374
 
А как по таймеру сверяться? Там можно дату сверить?
Kvest на форуме. не работает!   Ответить с цитированием
старое сообщение 07-07-2008, 14:44   #7
Kvest
 
 
Аватар для Kvest
 
Регистрация: 31-03-2007
Сообщений: 374
 
Цитата:
Сообщение от Skyggedans Прочитать
Блин, отдельный поток, слип...
А почему б просто таймер не заюзать?
Не пойму саму идею, как с помощью таймера? Не мог бы та объяснить слегка? Идея с потоком мне тоже не очень нравится
Kvest на форуме. не работает!   Ответить с цитированием
старое сообщение 07-07-2008, 17:40   #8
Ubivetz
 
 
Аватар для Ubivetz
 
Регистрация: 03-07-2006
Сообщений: 239
Цитата:
Сообщение от Kvest Прочитать
Не пойму саму идею, как с помощью таймера? Не мог бы та объяснить слегка? Идея с потоком мне тоже не очень нравится
Создай таймер чтобы он сработал в нужное время. И в обработчике выдай напоминание. Неужто это так сложно?
Ubivetz'а на форуме нет :(   Ответить с цитированием
старое сообщение 07-07-2008, 18:16   #9
Skyggedans
 
 
Аватар для Skyggedans
 
Регистрация: 20-04-2006
Местоположение: 19 Döbkinstraße, Kernesburg am Feldmannfluß
Сообщений: 1,924
  Отправить сообщение для  Skyggedans с помощью ICQ
Цитата:
Сообщение от Kvest Прочитать
Не пойму саму идею, как с помощью таймера? Не мог бы та объяснить слегка? Идея с потоком мне тоже не очень нравится
Ну на самом деле таймеры так и работают, создается отдельный поток, приостанавливается на нужный интервал, выполняется обработчик, и дальше по циклу. Но зачем изобретать велосипед?

void Timer1Tick(object sender, System.EventArgs e)
{
if (DateTime.Now >= timeToFire)
{
//выводим напоминание
//...
timer1.Enabled = False;
}
}

типа того
__________________
Skyggedans на форуме. не работает!   Ответить с цитированием
старое сообщение 07-07-2008, 18:38   #10
Renegade
 
 
Аватар для Renegade
 
Регистрация: 27-08-2005
Местоположение: Город грязи под ногами...
Сообщений: 5,116
  Отправить сообщение для  Renegade с помощью ICQ
оптимизация кода в реальном времени
__________________
Век наш таков, что он гордится машинами, умеющими думать,
и побаивается людей, которые проявляют ту же способность...


Харьков готик портал
Renegade'а на форуме нет :(   Ответить с цитированием
старое сообщение 08-07-2008, 09:05   #11
batu
 
 
Аватар для batu
 
Регистрация: 29-01-2007
Местоположение: Г. Труда 37
Сообщений: 210
  Отправить сообщение для  batu с помощью ICQ
Почти так.. Но ведь у тебя не одно задание..Создай событие.. В котором, будет очередь ожиданий, а реально заряжать таймер только на самое первое по времени задания. Это позволит не плодить "потоки".
__________________
ICQ 139070664
Моб. 8097 4548766
Life 8063 6392754
batu'а на форуме нет :(   Ответить с цитированием
старое сообщение 08-07-2008, 10:28   #12
Skyggedans
 
 
Аватар для Skyggedans
 
Регистрация: 20-04-2006
Местоположение: 19 Döbkinstraße, Kernesburg am Feldmannfluß
Сообщений: 1,924
  Отправить сообщение для  Skyggedans с помощью ICQ
Цитата:
Сообщение от batu Прочитать
Почти так.. Но ведь у тебя не одно задание..Создай событие.. В котором, будет очередь ожиданий, а реально заряжать таймер только на самое первое по времени задания. Это позволит не плодить "потоки".
Стопудов, там же можно цепочку делегатов заюзать, по одному на каждое событие.

Правда события друг от друга должны быть независимые, они ж вызываться будут в отфонарном порядке...
__________________
Skyggedans на форуме. не работает!   Ответить с цитированием
старое сообщение 08-07-2008, 12:18   #13
Kvest
 
 
Аватар для Kvest
 
Регистрация: 31-03-2007
Сообщений: 374
 
Спасибо всем за советы. С каждого взял по чуть-чуть Реализовал с помощью таймера. Причем сделал его внутри моего класса "задача" как статический. Поэтому поток плодиться не будет. При создании новой задачи он стартует. Обработчик выполняется для всех задач. Там они перебираются и соответственно выводятся напоминания. А после напоминания я просто определяю есть ли ещё задачи, если нет то я останавливаю таймер. А как только создаю новую он опять соответственно стартует и т.д. Вобщем всё довольно неплохо получилось. Ещё раз спасибо всем.
Kvest на форуме. не работает!   Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете писать в темах
Вы не можете загружать файлы
Вы не можете править свои посты

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:33.


RSS 0.91
RSS 2.0
Powered by vBulletin® Version 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Copyright ©2003 - 2008 www.kharkovforum.com
bigmir)net TOP 100