Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Timer_Tick не смотря ни на что


Автор: swetik1981 8.2.2014, 22:41
Программа должна выполнять некое действие в постоянном режиме, не зависимо от других происходящих в ней процессах. Например, постоянно со строгой периодичностью  подавать сигнал BEEP. Для этого взят Timer, в событии которого заложено:

Код

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
     Beep    

End Sub


Но, к сожалению, иногда таймер «замирает» и сигнал длительное время  не подаётся. Это происходит в моей программе  тогда, когда в программу загружаются большие базы данных. Я так понимаю, что это как-то связано с приоритетами потоков (хотя могу и ошибаться). Как сделать так, чтобы таймер вёл себя так, как и  положено таймеру,  - событие Timer1_Tick происходило с заданной для него периодичностью, не зависимо от других происходящих в программе процессов (пусть даже в ущерб скорости выполнения этих процессов)?

Автор: Certain 10.2.2014, 12:39
Если я не ошибаюсь, Вы используете Timer из  System.Windows.Forms, 
в редакторе на форму перетащили его из панели визуальных элементов.
Он, к сожалению, работает в том же потоке, в котором и был объявлен.
Если поток занят загрузкой каких-то данных из БД, то таймер и не сработает, 
пока поток не освободится и не вытащит сообщение таймера из очереди 
сообщений потока.
Используйте потоковый таймер System.Threading.Timer

Автор: jonie 10.2.2014, 18:48
Цитата(swetik1981 @  8.2.2014,  23:41 Найти цитируемый пост)
событие Timer1_Tick происходило с заданной для него периодичностью, не зависимо от других происходящих в программе процессов (пусть даже в ущерб скорости выполнения этих процессов)?

только в системах реального времени ваше требование "почти выполнимо"...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)