|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
Типа так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Может получиться, что MyMetod() будет работать дольше, чем вызов по таймеру. Что получится? Скопиться некая очередь на выполение метода? Или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 14:09 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
https://msdn.microsoft.com/en-us/library/system.timers.timer.elapsed(v=vs.110).aspx If the processing of the Elapsed event lasts longer than Interval, the event might be raised again on another ThreadPool thread. In this situation, the event handler should be reentrant. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 14:14 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
vlsafТипа так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Может получиться, что MyMetod() будет работать дольше, чем вызов по таймеру. Что получится? Скопиться некая очередь на выполение метода? Или нет? А вы стопайте таймер перед исполнением, и стартуйте его после ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 16:10 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
vlsafМожет получиться, что MyMetod() будет работать дольше, чем вызов по таймеру. Что получится? Вот чтобы об этом не думать (если понятно что процедура может затянуться), я со времен VB6 всегда делаю типа так. В VB6 кстати кажется пофиг, а вот в .Net кажется не пофиг. Но это точно безобидный вариант. Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Собственно вам уже подсказали выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 17:17 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
Почему не Stop - Start? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 18:59 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
vlsafПочему не Stop - Start? судя по документации это одно и то же Я просто по инерции придерживаюсь VB6 стиля. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.05.2015, 21:15 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
Дмитрий77vlsafМожет получиться, что MyMetod() будет работать дольше, чем вызов по таймеру. Что получится? Вот чтобы об этом не думатьа чо тут думать? в vb6 таймер это оконное сообщение WM_TIMER, обработка оконной происходит в том же потоке, что и программный код, следовательно таймер не тикнет, пока код не отработает. в дотнете два вида таймера, один оконный, второй поточный. первый, соответственно, ведет себя как в vb6, второй тикает независимо от основного потока. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2015, 10:55 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
Antonariyв vb6 таймер это оконное сообщение WM_TIMER, обработка оконной происходит в том же потоке, что и программный код в дотнете два вида таймера, один оконный, соответственно, ведет себя как в vb6 Так то оно так. Попробуй вот этот код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Каждые 5 секунд будет по msgbox-у. Предыдущие можно не закрывать. Что интересно, каждый следующий msgbox будет модальным относит. предыдущего. Как объяснишь? Вроде и WM_TIMER, и поток один. Че он тикать то продолжает? А вот так стопорится на время показа msgbox-а: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2015, 15:52 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
Дмитрий77Че он тикать то продолжает? http://stackoverflow.com/questions/1256963/if-messagebox-related-are-synchronous-why-doesnt-my-message-loop-freeze ... |
|||
:
Нравится:
Не нравится:
|
|||
13.05.2015, 17:46 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
Дмитрий77, даже выключение таймера не является гарантией от двойного срабатывания. Если интервал будет маленьким, а система в это время занята чем-нибудь - Вполне могут сгенерироваться два события таймера и стать в очередь сообщений. То есть, будет высокая вероятность, что таймер не сработает два раза. Но не абсолютная. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 09:14 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
Дмитрий77 Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Если каждые 5 секунд по окну - то значит, что окна не блокирующие. Кстати - сами можете проверить - если Debug.Print(m_count & " is ended") тоже каждые 5 секунд проскакивает... Попробуй MessageBox.Show(....) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 09:17 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
D129Попробуй MessageBox.Show(....) Будет аналогично. Если бы MessageBox блокировал очередь сообщений родительского окна, то он бы блокировал и WM_PAINT в том числе, и при перемещении окна мэссиджбокса над родительским, последнее бы не перерисовывалось - однако этого не происходит. Как сказано выше по ссылке, окно MessageBox'а имеет свой message loop, который часть сообщений рекурсивно транслирует в WndProc родительского окна. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 09:55 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
а не проще создать Task\Поток и в нём в конце метода задать паузу в 5 секунд? а через IProgress информировать UI об результатах выполнения или еще как, через Invoke, Dispatcher и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 11:27 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
Roman Mejtesа через IProgress информировать UI об результатах выполнения или еще как, через Invoke, Dispatcher и т.д. А здесь такая задача изначально и не ставилась, про UI завели речь в контексте обсуждения, нужно ли отключать при выполнении длинной блокирующей операции таймер, чтобы предотвратить повторный вход в обработчик тика, если этот таймер оконный (ответ: не нужно, если операция действительно блокирующая - которой показ модального диалога не является). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 11:44 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
D129Дмитрий77, даже выключение таймера не является гарантией от двойного срабатывания. Если интервал будет маленьким, а система в это время занята чем-нибудь - Вполне могут сгенерироваться два события таймера и стать в очередь сообщений. То есть, будет высокая вероятность, что таймер не сработает два раза. Но не абсолютная.При выключении таймера последующие сообщения, уже отправленные в очередь, игнорируются. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2015, 12:03 |
|
Стоит ли деелать lock в таймере?
|
|||
---|---|---|---|
#18+
D129Если каждые 5 секунд по окну - то значит, что окна не блокирующие. Кстати - сами можете проверить - если Debug.Print(m_count & " is ended") тоже каждые 5 секунд проскакивает... Не. свою процедуру он исправно блокирует. Debug.Print(m_count & " is ended") будет только после закрытия своего Msgbox, я не случайно эту хрень в тест-пример добавил. Короче проще по-любому добавить две страховочные строчки до и после "чтобы об этом не думать". Лучше перебздеть, чем недобздеть. А думать иногда вредно. Roman MejtesTask\Поток,IProgress,UI через Invoke, Dispatcher и т.д. Вот зачем столько много сложных слов? Когда можно без них просто и ясно разрулить ситуацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2015, 01:40 |
|
|
start [/forum/topic.php?fid=20&msg=38956821&tid=1401552]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
67ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 181ms |
0 / 0 |