Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Событие по смене даты 
V
    Опции темы
Experimenter
Дата 8.5.2007, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 8
Всего: 17



Уважаемые! Недавно возник такой вопрос: как в си-шарпе (win-сервис) вызвать событие при наступлении 0 часов 0 минут. То есть не проверяя ежесекундно (ежеминутно, ежечасно) сколько сейчас времени, а поставить флаг на это время и ждать... Или я уже заработался слишком и это невозможно в принципе?


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
Ch0bits
Дата 9.5.2007, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 9
Всего: 62



Нет.
Может быть только как-нибудь задействовать виндовый планировщик? (например чтобы тот запускал команду, которая будет дёргать твой сервис)  smile 
PM WWW   Вверх
sgrey
Дата 9.5.2007, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



можно конечно... в таймер записать чтобы он проверял время и если часы = 00 и минуты = 00, то запускай такой-то процесс
вот я для проверки сделал простое отображение времмени на лэйбле
Код

private void timer1_Tick(object sender, EventArgs e)
        {
            if (DateTime.Now.Hour == 15 && DateTime.Now.Minute == 14)
           {
                lblTime.Text = DateTime.Now.ToString();
           }
        }

только программа естественно должна быть включена... или можно просто отдельно написать процесс который будет запускать основную прогу в полночь

Это сообщение отредактировал(а) sgrey - 9.5.2007, 22:17
PM MAIL   Вверх
Retro
Дата 9.5.2007, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Цитата(sgrey @  9.5.2007,  21:14 Найти цитируемый пост)
или можно просто отдельно написать процесс который будет запускать основную прогу в полночь

Как по мне это более рационально.
PM MAIL   Вверх
sgrey
Дата 9.5.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



Цитата(Retro @ 9.5.2007,  22:31)
Как по мне это более рационально.

ну тут ещё зависит от того что конкретно нужно и какая прога... может она в любом случае будет работать, тогда и в неё вписать можно
PM MAIL   Вверх
Retro
Дата 9.5.2007, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Цитата(sgrey @  9.5.2007,  21:40 Найти цитируемый пост)
ну тут ещё зависит от того что конкретно нужно и какая прога... может она в любом случае будет работать, тогда и в неё вписать можно 

Это понятно, но если все, что нужно это вызвать событие по времени, то маленький процессик в памяти это, ИМХО, именно то, что нужно.
PM MAIL   Вверх
sgrey
Дата 9.5.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



Цитата(Retro @ 9.5.2007,  22:48)
Это понятно, но если все, что нужно это вызвать событие по времени, то маленький процессик в памяти это, ИМХО, именно то, что нужно.

согласен  smile 

кстати ещё шаг можно сделать минуту, а то он каждую милисекунду проверяет условие )) 
PM MAIL   Вверх
Retro
Дата 9.5.2007, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Цитата(sgrey @  9.5.2007,  21:51 Найти цитируемый пост)
кстати ещё шаг можно сделать минуту, а то он каждую милисекунду проверяет условие ))  

Ну да, тут конечным условием является - минимальная нагрузка.
PM MAIL   Вверх
archeg
Дата 9.5.2007, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 612
Регистрация: 6.1.2007
Где: Киев

Репутация: 11
Всего: 27



Цитата(sgrey @ 9.5.2007,  22:51)

кстати ещё шаг можно сделать минуту, а то он каждую милисекунду проверяет условие ))


Зачем минуту? Можно определить такой шаг, чтобы он сработал сразу тогда когда нужно.

Код

            DateTime t = DateTime.Now;
            DateTime resultTime = new DateTime(t.Year, t.Month, t.Day + 1, 0, 0, 0, 0); //Тут еще проверку календаря желательно
                        
            FarTimer = new Timer();
            TimeSpan span = resultTime - t;
            FarTimer.Interval = (int) span.TotalMilliseconds;
            FarTimer.Tick += new EventHandler(FarTimer_Tick);
            FarTimer.Start();


Если результирующее время отличаеться от текущего больше чем на 9 дней - то прийдеться делить на кусочки (по 9 дней) - может быть переполнение типа int

Это сообщение отредактировал(а) archeg - 10.5.2007, 00:03


--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
sgrey
Дата 10.5.2007, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 265
Регистрация: 15.4.2006

Репутация: нет
Всего: 4



Цитата(archeg @ 9.5.2007,  23:55)
Зачем минуту? Можно определить такой шаг, чтобы он сработал сразу тогда когда нужно.

Код

            DateTime t = DateTime.Now;
            DateTime resultTime = new DateTime(t.Year, t.Month, t.Day + 1, 0, 0, 0, 0); //Тут еще проверку календаря желательно
                        
            FarTimer = new Timer();
            TimeSpan span = resultTime - t;
            FarTimer.Interval = (int) span.TotalMilliseconds;
            FarTimer.Tick += new EventHandler(FarTimer_Tick);
            FarTimer.Start();


Если результирующее время отличаеться от текущего больше чем на 9 дней - то прийдеться делить на кусочки (по 9 дней) - может быть переполнение типа int

ну да, я сначала написал а потом подумал - зачем минуту, когда нам нужно только в полночь активировать? ))
как раз хотел исправлять )
PM MAIL   Вверх
Experimenter
Дата 10.5.2007, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 8
Всего: 17



Да, все правильно, только я забыл еще добавить, что событие должно возникать каждую полночь. Первый раз оно возникнет, а потом... Если вдруг понадобится Вин-сервис перезапустить, тогда как быть??? Возможно, наверное, так: при запуске сервиса 
Код

TimeSpan span = resultTime - DateTime.Now;
 при первом и последующих возникновениях события TimeSpan span будет равен целым суткам. Да, выглядит логично. Всем спасибо, если не будет других соображений, то через сутки закрою вопрос.


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
Experimenter
Дата 12.5.2007, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 430
Регистрация: 8.5.2007
Где: Уфа

Репутация: 8
Всего: 17



Да, тема закрыта


--------------------
public Zlo FromTwoEvilsChooseSmaller(Zlo zlo1, Zlo zlo2){
    if(zlo1 < zlo2) return zlo1;
    else if(zlo1 > zlo2) return zlo2;
    else throw new Exception("Kill yourself by the wall"); }
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 1.2184 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.