Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Timer отстает / 12 сообщений из 12, страница 1 из 1
28.01.2014, 16:51
    #38540843
Lexx_SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
Добрый день!
В программе встроен Timer который отсчитывает секунды, минуты, часы. Программа была написана несколько лет назад и под Windows XP все считалось правильно. Но сейчас под Windows 7 Timer отстает на ~1 минуту в час. Т.е. за день набегает до 10 минут.
С чем это может быть связано?
...
Рейтинг: 0 / 0
29.01.2014, 09:23
    #38541519
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
Lexx_SQLДобрый день!
В программе встроен Timer который отсчитывает секунды, минуты, часы. Программа была написана несколько лет назад и под Windows XP все считалось правильно. Но сейчас под Windows 7 Timer отстает на ~1 минуту в час. Т.е. за день набегает до 10 минут.
С чем это может быть связано?
какой таймер используешь
...
Рейтинг: 0 / 0
29.01.2014, 10:00
    #38541558
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
Lexx_SQLНо сейчас под Windows 7 Timer отстает на ~1 минуту в час.

И как считаешь отставание? И с какими параметрами таймер запущен?
...
Рейтинг: 0 / 0
29.01.2014, 10:25
    #38541600
Lexx_SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
pation,
использую таймер в комплекте vs2008
...
Рейтинг: 0 / 0
29.01.2014, 10:30
    #38541608
Lexx_SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
Arm79,
Секундомером я не замерял. Отставание видны в конце рабочего времени, когда после 8 часов отставание ~10 минут.
Параметр Timer Interval 1000- секунда.
...
Рейтинг: 0 / 0
29.01.2014, 10:55
    #38541668
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
Lexx_SQLиспользую таймер в комплекте vs2008
В комплекте VS никакого таймера нет. Таймеры есть в .Net - System.Timer, System.Timers.Timer, System.Threading.Timer. Если подняпрячься, можно поработать и с Multimedia Timer
...
Рейтинг: 0 / 0
29.01.2014, 10:57
    #38541673
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
Lexx_SQLС чем это может быть связано?С большой погрешностью используемого таймера?
...
Рейтинг: 0 / 0
29.01.2014, 10:59
    #38541680
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
Lexx_SQLПараметр Timer Interval 1000- секунда.

Погрешность таймера (стандартного) около 10-15 мс.
Итого, в час 3600 срабатываний. Берем худший случай: 3600 * 15 мс = 54 секунды в час.

+ если вы используете однопоточный таймер, типа Forms.Timer - там итерации отсчитываются после завершения предыдущего. Так что добавьте время на обработку одной итерации. Если в ней обращение к БД, то там уже приличные тайминги будут
...
Рейтинг: 0 / 0
29.01.2014, 11:00
    #38541682
Lexx_SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
Алексей К,
под Windows XP все считалось правильно...
...
Рейтинг: 0 / 0
29.01.2014, 11:04
    #38541692
Lexx_SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
Arm79,
Да, спасибо. Я уже тоже об этом думал.
Но что повлияло на работу таймера под Windows7. Неужели под Windows XP время на обработку несущественно...
...
Рейтинг: 0 / 0
29.01.2014, 11:12
    #38541710
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
Lexx_SQLArm79,
Да, спасибо. Я уже тоже об этом думал.
Но что повлияло на работу таймера под Windows7. Неужели под Windows XP время на обработку несущественно...

Учитывая, что вы не колетесь ни типом таймера, ни содержанием обработки итерации, всё, что я скажу - гадание на кофейной гуще. А таланта гадания у меня маловато.

Вполне возможно, что на XP квантование потоков немного другое, или количество запущенных потоков в системе сильно меньше, или быстрее отрисовка на форме. Да мало ли что...

Вообще неправильно рассчитывать, что таймер будет давать точно выверенные интервалы хотя бы потому, что Windows - не реал-тайм система
...
Рейтинг: 0 / 0
30.01.2014, 00:51
    #38542949
WitC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Timer отстает
...не зная потребности отсчёта времени...
если только получить время работы программы,
то стоит от текущего времени отнять фиксированное время начала работы программы...
таким образом не зависеть от тикетов и погрешностей...
например вот так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
        long runTicks = DateTime.Now.Ticks;
        System.Threading.Timer tmr = null;

        public Form1()
        {
            InitializeComponent();

            tmr = new System.Threading.Timer(new System.Threading.TimerCallback(TimerTicking), null, 0, 1000);
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (tmr != null)
            {
                tmr.Dispose();
            }
        }

        delegate void timerAllReady(string timeData);

        private void TimerTicking(object callBack)
        {
            TimeSpan ts = new TimeSpan(DateTime.Now.Ticks - runTicks);
            this.Invoke(new timerAllReady(TimeWriting), new object[] { string.Concat(ts.TotalHours.ToString("00"), ":",
                                                                                     ts.Minutes.ToString("0#"), ":",
                                                                                     ts.Seconds.ToString("0#")) });
        }

        private void TimeWriting(string timeData)
        {
            textBox1.Text = timeData;
        }
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Timer отстает / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]