Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Прокачайте класс

-

Вопросы и ответы, обсуждения

- Ваши вопросы по C# только в данном разделе

Ответ
 
Опции темы
Старый 31.03.2013, 18:23   #1
Заблокирован
 Рыцарь-капитан
Аватар для warl0ck
 
warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(
Регистрация: 29.01.2010
Сообщений: 547
Популярность: 41279
Сказал(а) спасибо: 692
Поблагодарили 2,270 раз(а) в 1,035 сообщениях
 
По умолчанию Прокачайте класс

Написал небольшой класс "будильника", но жопой чую что что-то здесь не так.

Код:
        static void Main(string[] args)
        {
            DateTime startTime =DateTime.Parse("31.03.2013 20:00:07");
            DateTime endTime = DateTime.Parse("1.04.2013 6:30:02");

            pTime t = new pTime();
            t.startTime = startTime;
            t.endTime = endTime;

            t.OnStart += sender => { Console.WriteLine("OnStart {0} лечь спать",DateTime.Now);/*BEEEEP();*/};
            t.OnStop += sender => { Console.WriteLine("OnStop {0} проснуться", DateTime.Now); /*BEEEEP();*/ };
            t.Start();

            Console.WriteLine("Vse");
            Console.Read();
        }
Сам класс
Код:
internal class pTime
    {
        private DateTime _startTime; //время начала
        private DateTime _endTime; //время окончания

        private Thread _myThread;

        public delegate void pTimeEventHandler(object Sender);

        /// <summary>
        /// оповещение о начале отсчета
        /// </summary>
        public event pTimeEventHandler OnStart;

        /// <summary>
        /// оповещение о окончании отсчета
        /// </summary>
        public event pTimeEventHandler OnStop;

        /// <summary>
        /// время начала
        /// </summary>
        public DateTime startTime
        {
            set { _startTime = value; }
            get { return _startTime; }
        }

        /// <summary>
        /// время окончания
        /// </summary>
        public DateTime endTime
        {
            set { _endTime = value; }
            get { return _endTime; }
        }

        public pTime()
        {
            _myThread = new Thread(pTimerStart);
        }

        public pTime(DateTime startTime, DateTime endTime)
        {
            _startTime = startTime;
            _endTime = endTime;
            _myThread = new Thread(pTimerStart);
        }

        private void pTimerStart()
        {
        IF30day:
            DateTime currentTime = DateTime.Now; //текущее время

            // если время начала больше времени окончания
            // или текущее время больше времени окончания
            if ((_startTime > _endTime) || (currentTime > endTime)) return;

            int sleepTime = 0;

            // если текущее время больше или равно времени начала
            if (currentTime >= _startTime)
            {
                OnStart.Invoke(this);

                sleepTime = Convert.ToInt32((_endTime.Ticks - currentTime.Ticks) / TimeSpan.TicksPerMillisecond);

                Thread.Sleep(sleepTime);
            }
            else
            {
                sleepTime = Convert.ToInt32((startTime.Ticks - currentTime.Ticks) / TimeSpan.TicksPerMillisecond);

                Thread.Sleep(sleepTime);
                goto IF30day;
            }

            OnStop.Invoke(this);
        }

        public void Start()
        {
            // if ((_myThread.ThreadState == ThreadState.Running) || (_myThread.ThreadState == ThreadState.WaitSleepJoin)) return;
            if (!_myThread.IsAlive)
            {
                _myThread.Start();
            }
        }

        public void Stop()
        {
            //  if ((_myThread.ThreadState != ThreadState.Running) || (_myThread.ThreadState != ThreadState.WaitSleepJoin)) return;
            if (_myThread.IsAlive)
            {
                _myThread.Abort();
            }
        }
    }
  Ответить с цитированием
Старый 31.03.2013, 19:33   #2
Проверенный продавец
 Рыцарь-лейтенант
Аватар для EICGoliath
 
EICGoliath сломал счётчик популярности :(EICGoliath сломал счётчик популярности :(EICGoliath сломал счётчик популярности :(EICGoliath сломал счётчик популярности :(EICGoliath сломал счётчик популярности :(EICGoliath сломал счётчик популярности :(EICGoliath сломал счётчик популярности :(EICGoliath сломал счётчик популярности :(EICGoliath сломал счётчик популярности :(EICGoliath сломал счётчик популярности :(EICGoliath сломал счётчик популярности :(
Регистрация: 24.06.2010
Сообщений: 406
Популярность: 14404
Золото Zhyk.Ru: 112
Сказал(а) спасибо: 336
Поблагодарили 1,039 раз(а) в 595 сообщениях
 
По умолчанию Re: Прокачайте класс

Pimp my class
________________


  Ответить с цитированием
Старый 31.03.2013, 20:20   #3
 Сержант
Аватар для Yukikaze
 
Yukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядомYukikaze в состоянии испепелить взглядом
Регистрация: 01.10.2011
Сообщений: 128
Популярность: 5723
Сказал(а) спасибо: 25
Поблагодарили 174 раз(а) в 105 сообщениях
 
По умолчанию Re: Прокачайте класс

Месяц в int не запихнешь, а вот перегрузка под TimeSpan у Thread.Sleep есть.
Код:
Thread.Sleep(currentTime - _startTime);
Легким движением руки мы избавляемся от костыля

Добавлено через 15 минут
Цитата:
Сообщение от warl0ckПосмотреть сообщение
Код:
OnStart.Invoke(this);
OnStop.Invoke(this);

Очень хреновая практика, для событий обычно инвокаторы пишутся, по типу такого
Код:
private void OnStart()
{
	var handler = OnStart;
	if(handler != null)
		handler(this);
}
Ибо если на событие не подписаться, но при этом попытаться вызвать его то получим NullReferenceException.
А еще паблик методы принято называть с заглавной буквы, так же как и типы, безо всяких префкисов p/T/etc, единственное исключение интерфейсы, они начинаются с заглавной i

ЗЫ Про label/goto я вообще молчу, и не понимаю зачем он там нужен О_о
________________
Talk is cheap. Show me the code
— Linus Torvalds

Последний раз редактировалось Yukikaze; 31.03.2013 в 20:37. Причина: Добавлено сообщение
  Ответить с цитированием
Пользователь сказал cпасибо:
warl0ck (31.03.2013)
Старый 01.04.2013, 11:46   #4
Заблокирован
 Рыцарь-капитан
Аватар для warl0ck
 
warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(
Регистрация: 29.01.2010
Сообщений: 547
Популярность: 41279
Сказал(а) спасибо: 692
Поблагодарили 2,270 раз(а) в 1,035 сообщениях
 
По умолчанию Re: Прокачайте класс

Цитата:
Сообщение от YukikazeПосмотреть сообщение
ЗЫ Про label/goto я вообще молчу, и не понимаю зачем он там нужен О_о

я не знал что Thread.Sleep заточен и под TimeSpan, поэтому использовал int + goto
Спасибо, класс прокачан!
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Куплю] ПРОКАЧАЙТЕ МНЕ АКК!!! newMyakk183 World of Tanks 2 26.03.2013 17:39
[Услуги] Прокачайте мой акк Varvada World of Tanks 0 14.01.2013 21:15
[Помогите!] Прокачайте necros95 Общение и обсуждение 2 09.07.2012 07:12
[Услуги] Прокачайте =DD Perfect World 0 17.05.2011 18:14
[VIP] Прокачиваем суб класс J-Fobos Подполье Lineage 2 (0 уровень) 1 15.05.2009 14:48

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 01:43.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net