|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
У меня вопрос к знатокам. Если в проекте несколько одновременно работающих таймеров работают ли они параллельно (одновременно)? Скажем одним таймером я осуществляю обмен с последовательным портом Ser1, а вторым с портом Ser2. Будет ли обмен идти параллельно? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 15:03 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Это вопрос не к таймерам, а к организации многопоточной работы в твоей программе. Если будешь обрабатывать всё в одном потоке (например в потоке синхронизации), то не будет. Таймеров тоже несколько видов в .NET ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 15:14 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Например, в проекте VS-2010 VB.Net два таймера из стандартных контролов Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick и Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick В этом случае они будут работать параллельно? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 16:04 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Проверить элементарно: завесь один таймер, MessageBox() или пауза длинная, и смотри второй срабатывает или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 16:13 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Спасибо, это идея, попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 16:14 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Slava777 Например, в проекте VS-2010 VB.Net два таймера из стандартных контролов Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick и Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick В этом случае они будут работать параллельно? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.09.2020, 16:28 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Вот элементарный проект с тремя таймерами на 100 мс каждый. Визуально не видно, что они работают последовательно. При t=1 c. так же не видно неодновременности? Код: vbnet 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2020, 13:53 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Этот код ровным счетом ничего не показывает. Судя по всему, ты под "параллельностью" понимаешь что-то своё. Будут ли идти все три таймера параллельно? Да. Будут ли параллельно выполняться хендлеры? Нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2020, 14:40 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
В какой последовательности будут выполняться хендлеры? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2020, 14:54 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Если пришел хендлер по таймеру, а времени выполнения до следующего хендлера по этому таймеру не хватило, что будет? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2020, 15:06 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Slava777, таймер можно сбрасывать и перезапускать после выполнения делегата, но как по мне ими вообще не стоит пользоваться. если за время выполнения 1 операции время истечет, то 2 операция будет запущена во время первой ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2020, 15:14 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Если не перезапускать таймер, будут ли выполнены все операции, если придет следующий тик, а все операции еще не успели выполниться? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2020, 15:25 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Slava777 В какой последовательности будут выполняться хендлеры? Slava777 Если пришел хендлер по таймеру, а времени выполнения до следующего хендлера по этому таймеру не хватило, что будет? Slava777 Если не перезапускать таймер, будут ли выполнены все операции, если придет следующий тик, а все операции еще не успели выполниться? В любом случае, как сказал Роман, лучше отключать таймер на время обработки события, и потом включать его заново. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2020, 15:40 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Shocker.Pro, у меня все таймеры их 2 инициализированы сразу при начале выполнения всего проекта. Значит гарантии нет, что вся арифметика и обмен выполниться, если не уложится по времени и придет следующий тик? У мня вся проблема в том, что есть операции обмена, которые более приоритетны по времени, а есть менее приоритетны. Нужно ли их разносить по двум таймерам? Первый скажем более быстрый, а второй менее. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2020, 16:01 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Slava777 у меня все таймеры их 2 инициализированы сразу при начале выполнения всего проекта Slava777 Значит гарантии нет, что вся арифметика и обмен выполниться, если не уложится по времени и придет следующий тик? Slava777 Нужно ли их разносить по двум таймерам? Первый скажем более быстрый, а второй менее. Если у тебя есть какая-то длительная математика на обработке для порта №1, и ты не хочешь, чтобы обмен с портом №2, от этого тормозился, тогда делай расчеты в отдельном потоке, а не в потоке синхронизации, как сейчас. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2020, 16:34 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Спасибо всем за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.09.2020, 18:22 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Как вариант, можно все реализовать через Task'и (с асинхронностью или без) и свою реализацию TaskScheduler'а который будет сам управлять очередностью выполнения задач. Либо без Шедулера, просто в цикле с выходом по операции отмены, вместо таймера можно сделать ожидание N секунд. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 09:01 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Shocker.Pro, я так понял, что в потоках нужно использовать системные таймеры вот код. Код: 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.
t3 - системный таймер. Но возникает проблема передачи переменных между потоками. Глобальные переменные не идут. Что здесь можно посоветовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 10:57 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Slava777 Но возникает проблема Slava777 не идут ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 11:21 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Shocker.Pro Поскольку таймеры ты инициализируешь не одновременно то, скорее всего, выполняться хендлеры будут в последовательности инициализации. Но без гарантии, естественно. Скорее всего вообще в неопределенной - кто первый в очередь мессагу кинул, тот и победил. ТС, тебе нужен не таймер из контролов, а какой-нибудь другой. Таймер из контролов он специально для случая когда тебе надо на события таймера делать что-то в GUI. А если хочешь параллельности, то бери либо System.Threading.Timer or System.Timers.Timer. Но вся синхронизация, если нужна, будет уже на тебе. И еще, да, мышкой в дизайнере их не нарисуешь ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 11:47 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Shocker.Pro, речь идет не о контролах, а о переменных описанных в модуле. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 12:04 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
fkthat, я системный таймер и использую, смотрите последний код. Проблема в передаче данных между потоками. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 12:05 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Shocker.Pro, компилятор жалуется, что переменная check создана в другом потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 12:08 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Slava777 fkthat, я системный таймер и использую, смотрите последний код. Проблема в передаче данных между потоками. Я в душе не пойму, зачем тебе там еще и потоки? Коллбеки таймеров и так будут вызываться асинхронно в отдельных потоках взятых из пула, а у тебя какая-то на горе гора получилась. По-хорошему про существование класса Thread лучше вообще забыть. Для многопоточности есть куча готовых более высокоуровневых паттернов. Если говорить о "старом" дотнет, то, навскидку, QueueWorkItem, асинхронные вызовы, BackgroundWorker, и те же всевозможные таймеры. Ну а если фреймворк поновее, то тут, да, TPL наше все :) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 13:09 |
|
Программирование таймеров в VB.Net
|
|||
---|---|---|---|
#18+
Slava777 Shocker.Pro, компилятор жалуется, что переменная check создана в другом потоке. Погоди-ка. Судя по Код: c# 1.
тебе как раз и нужем формсовский таймер. У тебя же иначе все падать будет - ты вызываешь контрол из чужого потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2020, 13:21 |
|
|
start [/forum/topic.php?fid=20&msg=39999905&tid=1398454]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 291ms |
total: | 442ms |
0 / 0 |