С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
jumperAlex
74 / 26 / 19
Регистрация: 13.10.2014
Сообщений: 89
1

Периодическое выполнение метода, но не таймер

25.03.2015, 21:36. Просмотров 454. Ответов 7
Метки нет (Все метки)

Здравствуйте. Может глупый вопрос, но мне интересно. В потоке выполняется цикл while с условием выхода. В теле цикла какой-то код, но он должен выполняться, к примеру, каждые две секунды. Что более эффективно для приложения, в котором таких потоков множество (от 50 и более), вот такой вариант
C#
1
2
3
4
5
6
7
 System.Threading.AutoResetEvent pEvent = new System.Threading.AutoResetEvent(false)
            while (!RequestStop)
            {
                //код
                pEvent.WaitOne(2000);
            }
pEvent.Close();
или обычный слип?
C#
1
2
3
4
5
while (!RequestStop)
            {
                //код
                System.Threading.Sleep(2000);
            }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.03.2015, 21:36
Ответы с готовыми решениями:

Приостановить выполнение программы пока не сработает таймер n раз
Имеется вот такой обработчик события Tick: private void...

Разное выполнение метода Invalidate()
Объясните кто-нибудь почему у меня на разных компьютерах метод Invalidate()...

Ожидание выполнение асинхронного метода
Всем привет. Помогите разобраться с асинхронным программированием. Пишу...

Отменить выполнение метода по таймауту
Умею отменять методы по таймауту. К примеру, есть метод LongRunningMethod. Его...

Как не используя таймер и потоки можно выставить таймаут метода
Люди, понимаю, что вопрос детский, но все-же. Как не используя таймер и потоки...

7
insite2012
Модератор
Эксперт .NET
4865 / 3818 / 1096
Регистрация: 12.10.2013
Сообщений: 11,095
Записей в блоге: 2
25.03.2015, 22:38 2
Цитата Сообщение от jumperAlex Посмотреть сообщение
Что более эффективно
На счет эффективности не скажу, но думаю, что если нужна просто задержка код в данной точке, то лучше использовать Thread.Sleep(), чем EventWaitHandle(). Он более подходит для межпотокового взаимодействия.
1
Metall_Version
2119 / 1256 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
Завершенные тесты: 2
26.03.2015, 00:26 3
jumperAlex, а почему не таймер, он как раз отлично сюда подходит, в отличии от Thread.Sleep() который лучше вообще не юзать
0
insite2012
Модератор
Эксперт .NET
4865 / 3818 / 1096
Регистрация: 12.10.2013
Сообщений: 11,095
Записей в блоге: 2
26.03.2015, 09:53 4
Цитата Сообщение от Metall_Version Посмотреть сообщение
в отличии от Thread.Sleep() который лучше вообще не юзать
Это почему? Обычное средство, в некоторых случаях очень даже необходимое.
0
Metall_Version
2119 / 1256 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
Завершенные тесты: 2
26.03.2015, 09:57 5
insite2012, http://stackoverflow.com/questions/8...eep-so-harmful
0
insite2012
Модератор
Эксперт .NET
4865 / 3818 / 1096
Регистрация: 12.10.2013
Сообщений: 11,095
Записей в блоге: 2
26.03.2015, 10:22 6
Metall_Version, в добавленном участке поста по ссылке сказано, что данную конструкцию вполне можно использовать, при некоторых сценариях.
We have 2 different use-cases: 1) We are waiting because we know a specific timespan when we should continue (use Thread.Sleep, System.Threading.Timer or alikes) 2) We are waiting because some condition changes some time ... keyword(s) is/are some time! if the condition-check is in our code-domain, we should use WaitHandles - otherwise the external component should provide some kind of hooks
0
jumperAlex
74 / 26 / 19
Регистрация: 13.10.2014
Сообщений: 89
26.03.2015, 23:18  [ТС] 7
Metall_Version, может случиться ситуация, когда тело цикла будет выполняться по времени более интервала (в данном случае более двух секунд). Таймер ведь не будет ждать окончания для следующего вызова.
0
Metall_Version
2119 / 1256 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
Завершенные тесты: 2
26.03.2015, 23:57 8
jumperAlex, в теле блокируем таймер, в конце тела запускаем таймер через 2 секунды.
0
26.03.2015, 23:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2015, 23:57

Как прекратить выполнение асинхронного метода
Есть форма. По событию mouseUp исполняется следующий код: _isDragging = false;...

Выполнение метода в отдельном потоке без await/async
В десктопном WPF проекте с .Net 4.0 необходимо сделать так: private void...

Как прервать выполнение тестового метода при отсутствии соединения с Интернет
В проекте с юнит-тестами (VS 2010) есть метод, который тестирует некую функцию....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru