Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / медленный бесполезный таймер / 22 сообщений из 22, страница 1 из 1
31.10.2020, 12:47
    #40013675
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
пишу простейший код в vb.net2019, где хочу показать прогресс бар, который заполнится за секунду по таймеру каждые 10мс. и обнаруживаю, что прогресс бар заполняется в полтора раза медленнее.
собрал проект, где только таймер и лейбел, в который выводятся тики, и вижу, что таймер в vb.net сильно отстаёт, в полтора раза для интервала в 1мс! что за криворукие таймеры, неужели нельзя нормально посчитать 1 мс без сторонних скачанных таймеров, сна всего приложения и горы кода?
...
Рейтинг: 0 / 0
31.10.2020, 12:50
    #40013676
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Слишком маленький интервал, скорее всего часть тиков пропускается. Проверь набольшем интервале, тогда сможешь судить о криворукости разработчиков vb.net (а не о собственной). Ну и код приведи, конечно же.

P.S. Я в третий раз переношу тему из Visual Basic в VB.NET. Вообще-то уже можно было сообразить, где нужно задавать вопросы по VB.NET


Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
31.10.2020, 13:35
    #40013685
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
вот такой код работает в 16 (!!!) раз медленнее, чем должен. в лейбле должен идти отсчет каждую секунду, а идёт 16 секунд
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Dim tik As Long
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        tik = tik + 1
        If tik Mod 1000 = 0 Then
            Label1.Text = Str(tik / 1000)
        End If
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        tik = 0
        Label1.Text = 0
        Timer1.Interval = 1
        Timer1.Enabled = True
    End Sub

Shocker.ProПроверь набольшем интервале, тогда сможешь судить о криворукости разработчиков vb.net
- вы мне вместо килограмма картошки посчитали 16 килограммов
- это на 1 кг заметно, а если будете покупать тоннами, то нормально, с вас тысяча
...
Рейтинг: 0 / 0
31.10.2020, 14:19
    #40013694
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Еще раз. Таймер 1 мс слишком маленький. Тики будут пропускаться, пока идет обработка

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    tik = tik + 10
    If tik Mod 1000 = 0 Then
      Label1.Text = Str(tik / 1000)
    End If
  End Sub

  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    tik = 0
    Label1.Text = 0
    Timer1.Interval = 10
    Timer1.Enabled = True
  End Sub

и всё волшебным образом теперь работает!
...
Рейтинг: 0 / 0
31.10.2020, 14:21
    #40013698
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Но если ты еще сильнее нагрузишь обработчик тиков (если он станет работать дольше 10мс), то тики опять начнут пропускаться. Так устроена обработка таймера в WinForms (есть и другие таймеры)
...
Рейтинг: 0 / 0
31.10.2020, 14:25
    #40013700
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
qlewerok
вот такой код работает в 16 (!!!) раз медленнее
кстати, если на своей машине ты получаешь результат x16, то x10 в таймере для твой машины может оказаться маловато. У меня твой вариант кода работает в 9 раз медленнее, а не в 16.
...
Рейтинг: 0 / 0
31.10.2020, 14:26
    #40013701
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Shocker.Pro
и всё волшебным образом теперь работает!
нет, не работает. приведенный код считает в полтора раза медленнее, чем должен. держу у уха механические часы и сравниваю тики, до чего дожили) как нормально правильно посчитать если не 1мс, то хотя бы 10мс?
...
Рейтинг: 0 / 0
31.10.2020, 14:28
    #40013702
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Shocker.Pro
qlewerok
вот такой код работает в 16 (!!!) раз медленнее
кстати, если на своей машине ты получаешь результат x16, то x10 в таймере для твой машины может оказаться маловато. У меня твой вариант кода работает в 9 раз медленнее, а не в 16.
угадал) но к железу или софту претензий быть не может, i5-3570k, винда 7х64, студию только вчера переустановил
...
Рейтинг: 0 / 0
31.10.2020, 14:31
    #40013703
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Если тебе нужно отмерять реально по 1мс, обычный Windows тебе не особо подойдет.
...
Рейтинг: 0 / 0
31.10.2020, 15:20
    #40013725
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Попробуй таймер из System.Threading.
...
Рейтинг: 0 / 0
31.10.2020, 16:21
    #40013738
fkthis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Shocker.Pro
P.S. Я в третий раз переношу тему из Visual Basic в VB.NET. Вообще-то уже можно было сообразить, где нужно задавать вопросы по VB.NET

ТСы, наверное VB уже даже не застали
...
Рейтинг: 0 / 0
31.10.2020, 16:24
    #40013739
fkthis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Если там
qlewerok
только таймер и лейбел

то от чего же он
qlewerok
сильно отстаёт

От полета мысли, что ли?
...
Рейтинг: 0 / 0
31.10.2020, 17:36
    #40013752
qlewerok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
vb_sub
Попробуй таймер из System.Threading.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Dim tik As Long
    Private myTimer As System.Threading.Timer
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        tik = 0
        Label1.Text = 0
        Dim myCallback As New System.Threading.TimerCallback(AddressOf Task1)
        myTimer = New System.Threading.Timer(myCallback, Nothing, 0, 10)

    End Sub
    Private Sub Task1(ByVal state As Object)
        tik = tik + 1
        Label1.Invoke(Sub() Label1.Text = tik)
    End Sub

так же. в полтора раза медленнее реального времени считает с интервалом 10мс

fkthis,
как десять лет назад, когда начинал с vb6 на этом форуме, так и сейчас, раздражают спамеры
...
Рейтинг: 0 / 0
31.10.2020, 17:54
    #40013755
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Пробуй в дополнительном потоке его запускать.
...
Рейтинг: 0 / 0
01.11.2020, 07:54
    #40013881
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
vb_sub
Пробуй в дополнительном потоке его запускать.

Это ничего не даст - таймер из System.Windows.Forms работает в основном GUI-потоке, и срабатывает по оконным сообщениям, при запуске в отдельном потоке его придётся синхронизировать с основным. А другие таймеры (из System.Threading, System.Timers) хоть и срабатывают в своём отдельном потоке, но, поскольку вывод делаестя в label, то и их придется синхронизировать, и на этой синхронизации опять возникнут задержки. Подсчитывать точное время при наличии операций, завязанных на GUI - дело ещё то.
...
Рейтинг: 0 / 0
01.11.2020, 10:27
    #40013890
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Сон Веры Павловны
Подсчитывать точное время при наличии операций, завязанных на GUI - дело ещё то.

В таких случаях надо просто не полагаться на таймер, а в обработчике события запрашивать настоящее текущее время (DateTime(Offset).(Utc)Now.
...
Рейтинг: 0 / 0
01.11.2020, 10:34
    #40013891
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Shocker.Pro
Еще раз. Таймер 1 мс слишком маленький. Тики будут пропускаться, пока идет обработка

Мне, кстати, вот, любопытно он будет тики пропускать, или забъет очередь GUI своими сообщениями?
...
Рейтинг: 0 / 0
01.11.2020, 10:36
    #40013892
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
fkthat
Shocker.Pro
Еще раз. Таймер 1 мс слишком маленький. Тики будут пропускаться, пока идет обработка

Мне, кстати, вот, любопытно он будет тики пропускать, или забъет очередь GUI своими сообщениями?
Будет пропускать, иначе очередь хрен дойдет до других сообщений.
...
Рейтинг: 0 / 0
01.11.2020, 11:22
    #40013897
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Осталось только найти еще киберглаз, который сможет замечать изменения в Label с частотой в 1 мс.
...
Рейтинг: 0 / 0
01.11.2020, 11:35
    #40013900
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
fkthat
он будет тики пропускать
именно это ТС блестяще продемонстрировал с примером )
...
Рейтинг: 0 / 0
01.11.2020, 12:01
    #40013904
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
Shocker.Pro
fkthat
он будет тики пропускать
именно это ТС блестяще продемонстрировал с примером )

Ну я выше как раз и написал, что непонятно, что ТС имеет в виду под словом "отстает". То ли тик пропускает, то ли этот тик приходит в хендлер только через полчаса. Тут уже привычно, что, чтобы дешифровать вопросы надо быть вторым Тьюрингом.
...
Рейтинг: 0 / 0
01.11.2020, 12:10
    #40013906
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
медленный бесполезный таймер
fkthat
ТС имеет в виду
Ну да, ТС имел ввиду, что таймер идет медленнее, потому что он не знал о пропуске тиков и неверно трактовал ситуацию.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / медленный бесполезный таймер / 22 сообщений из 22, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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