Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
74 / 26 / 19
Регистрация: 13.10.2014
Сообщений: 89
1
.NET 4.x

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте. Может глупый вопрос, но мне интересно. В потоке выполняется цикл 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2015, 21:36
Ответы с готовыми решениями:

Периодическое выполнение метода в Windows_Form приложении
Добрый день, у меня вопрос: сеть форма с кнопкой, по нажатию на кнопку однократно выполняется...

Периодическое выполнение метода с помощью таймера
Здравствуйте! У меня есть метод, я хочу чтобы он срабатывал, каждые 5 секунд. как это сделать при...

Периодическое выполнение макроса в книге
Помогите, пожалуйста, написать макрос, чтоб выполнялся периодически, каждые 10 секунд. Сейчас у...

Как повесить thread на периодическое выполнение?
Создаю отдельный thread из своей проги. Конечно, он выполняется однократно и сливается. Если же...

7
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
25.03.2015, 22:38 2
Цитата Сообщение от jumperAlex Посмотреть сообщение
Что более эффективно
На счет эффективности не скажу, но думаю, что если нужна просто задержка код в данной точке, то лучше использовать Thread.Sleep(), чем EventWaitHandle(). Он более подходит для межпотокового взаимодействия.
1
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
26.03.2015, 00:26 3
jumperAlex, а почему не таймер, он как раз отлично сюда подходит, в отличии от Thread.Sleep() который лучше вообще не юзать
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
26.03.2015, 09:53 4
Цитата Сообщение от Metall_Version Посмотреть сообщение
в отличии от Thread.Sleep() который лучше вообще не юзать
Это почему? Обычное средство, в некоторых случаях очень даже необходимое.
0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
26.03.2015, 09:57 5
insite2012, http://stackoverflow.com/quest... so-harmful
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 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
74 / 26 / 19
Регистрация: 13.10.2014
Сообщений: 89
26.03.2015, 23:18  [ТС] 7
Metall_Version, может случиться ситуация, когда тело цикла будет выполняться по времени более интервала (в данном случае более двух секунд). Таймер ведь не будет ждать окончания для следующего вызова.
0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
26.03.2015, 23:57 8
jumperAlex, в теле блокируем таймер, в конце тела запускаем таймер через 2 секунды.
0
26.03.2015, 23:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.03.2015, 23:57
Помогаю со студенческими работами здесь

Периодическое выполнение определенного кода в программе с задержкой
Кто подскажет, возможно ли создать программу, которая с определённой частотой (скажем, раз в...

Как из метода отправить переменную в другой метод и продолжить выполнение метода?
Здравствуйте, подскажите пожалуйста, как из метода отправить переменную в другой метод и продолжить...

Таймер на выполнение всего кода
Здравствуйте. Надо сделать таймер, который будет через n секунд выполнять весь код. Я не могу...

Поставить таймер на выполнение потока
Здравствуйте. Есть действие, которое при выполнении может зависнуть. Мне нужно переступить его,...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru