1 / 1 / 0
Регистрация: 20.04.2010
Сообщений: 29
|
|
1 | |
несколько таймеров в программе?26.05.2010, 15:16. Показов 8262. Ответов 12
Метки нет (Все метки)
Люди добрые, подскажите пожалуйста!
В данный момент в моей программе (кстати, на Windows Mobile) крутятся 5 таймеров. У некоторых из них одинаковый интервал. Сначала все таймеры были System.Windows.Forms.Timer, но программа не всегда работала корректно. Я предположила, что возможно, какой то из таймеров срабатывает и не дает сработать другому таймеру. (то есть если события должны произойти одновременно, то произойдет только одно из них). На всякий случай заменила таймеры на System.Threading.Timer (в данном случае, действия по таймеру выполняются в отдельном потоке), но проблема осталась. Возможно ли на самом деле такое, что проблемы возникают из-за одновременности срабатывания таймеров? И еще - есть ли смысл использовать System.Threading.Timer если операции, выполняемые по таймеру, не занимают много времени? (например, считывается заряд аккумулятора КПК), а то в данном случае, хотя действие и выносится в отдельный поток, время затрачивается на создание и на завершение этого потока каждый раз когда срабатывает таймер
0
|
26.05.2010, 15:16 | |
Ответы с готовыми решениями:
12
Запуск нескольких таймеров в потоке Массив таймеров и 1 обработчик события Tick Массив таймеров Несколько таймеров |
26.05.2010, 17:19 | 2 |
Если интервал одинаковый, зачем разносить действия в разные потоки, если можно выполнить в одном?
Что значит некорректно? Такого быть не может. Прото события выполнятся последовательно (с какой-то изерной задержкой). Этого вы врядли добьетесь. Хотя тут все зависит от того, какой промежуток времени у Вас входит в понятие "одновременно". System.Windows.Forms.Timer также для себя создает отдельный поток, так что не вижу смысла.
0
|
1 / 1 / 0
Регистрация: 20.04.2010
Сообщений: 29
|
|
26.05.2010, 21:49 [ТС] | 3 |
Потому что заранее неизвестно, будут ли эти действия выполняться с одинаковым интервалом
Так конечно одними словами плохо наверно писать, какой то абстрактный вопрос получается, но код приводить тоже смысла нету, там много...
0
|
26.05.2010, 22:54 | 4 |
Прочитал в MSDN
0
|
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
|
|
27.05.2010, 03:24 | 5 |
System.Windows.Forms.Timer не создает нового потока. Смотрите в MSDN.
0
|
4337 / 1506 / 101
Регистрация: 12.04.2009
Сообщений: 2,342
|
|
27.05.2010, 05:01 | 6 |
0
|
1 / 1 / 0
Регистрация: 20.04.2010
Сообщений: 29
|
|
27.05.2010, 09:10 [ТС] | 7 |
0
|
27.05.2010, 09:12 | 8 |
body90, HIMen, согласен, че-то бес меня попутал, я сразу в MSDN и смотрел, только в раздел System.Threading.Timer. Но в любом случае несколько System.Windows.Forms.Timer не должны глушить друг друга.
0
|
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
|
|
27.05.2010, 14:35 | 9 |
Глушить они не должны друг друга. Теоретически, они вообще ставятся в очередь. Вот только интересно, как они влазят в естественный ход программы? Раз они не создают отдельный поток, значит в нужное время онные вписываются в поток в каком месте не происходило бы выполнение. Возможно, так же они влазят друг в друга. Хотя, весьма сомневаюсь в этом.
0
|
I ♥ C#
470 / 261 / 25
Регистрация: 07.05.2010
Сообщений: 567
|
||||||
27.05.2010, 21:15 | 10 | |||||
Провел небольшой эксперимент.
Сообщение от Question
2
|
464 / 341 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
|
|
28.05.2010, 10:16 | 11 |
Вы только что доказывали, что таймер выполняется не в отдельном потоке и тут же говорите, что нужна синхронизация потоков... И как это 'главный поток освободится'?
0
|
I ♥ C#
470 / 261 / 25
Регистрация: 07.05.2010
Сообщений: 567
|
|
28.05.2010, 15:58 | 12 |
Ну, у автора-то сейчас таймеры System.Threading. А если нет, то может быть время на таймерах выставлено неправильно. Например, один таймер срабатывает каждые 60 секунд, а другой - каждые 61. Тогда через час логика программы нарушится. Но это все гадание на кофейной гуще, как тут можно с определенностью что-то сказать... А на счет "поток освободится" - я имел в виду, что он не будет иметь очереди команд на выполнение. В ходе еще нескольких экспериментов я выяснил, что таймер не может влезть ни между циклами, ни между функциями вызванными из другой функции, он будет ждать пока не произойдет выход из функции самого верхнего уровня - после завершения которой, управление не передается другой функции.
0
|
1 / 1 / 0
Регистрация: 20.04.2010
Сообщений: 29
|
|
28.05.2010, 16:23 [ТС] | 13 |
Следственный анализ показал, что таймеры (System.Windows.Forms.Timer) работают правильно и никто из них никому не мешает. Проблема была действительно в том, что иногда данные удалялись раньше, чем происходила запись в файл, поэтому и получались такие "провалы". Буду думать как исправить ситуацию. Всем спасибо за ответы
0
|
28.05.2010, 16:23 | |
28.05.2010, 16:23 | |
Помогаю со студенческими работами здесь
13
Несколько файлов на вход программе Использование повторяющегося участка кода в программе несколько раз Поочередное срабатывание таймеров Timer, наложение таймеров один на другой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |