Написать бесконечный цикл просто:
while(true){
//add whatever break condition here
}
Но это снизит производительность процессора. Этот поток выполнения будет потреблять как можно больше ресурсов процессора.
Каков наилучший способ снизить нагрузку на процессор? Добавление некоторых Thread.Sleep(n)
должно помочь, но установка большого значения времени ожидания для метода Sleep()
может указывать на то, что приложение не отвечает операционной системе.
Допустим, мне нужно выполнять задачу каждую минуту или около того в консольном приложении. Мне нужно, чтобы Main()
работал в «бесконечном цикле», пока таймер запускает событие, которое выполнит эту работу. Я хотел бы оставить Main()
с наименьшим влиянием на ЦП.
Какие методы вы предлагаете. Sleep()
может быть в порядке, но, как я уже упоминал, это может указывать на то, что операционная система не отвечает потоку.
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ:
Я хочу лучше объяснить, что я ищу:
Мне нужно консольное приложение, а не служба Windows. Консольные приложения могут имитировать службы Windows в системах Windows Mobile 6.x с помощью Compact Framework.
Мне нужен способ поддерживать работу приложения, пока работает устройство Windows Mobile.
Мы все знаем, что консольное приложение работает до тех пор, пока выполняется его статическая функция Main(), поэтому мне нужен способ предотвратить выход из функции Main().
В особых ситуациях (например, при обновлении приложения) мне нужно запросить остановку приложения, поэтому мне нужно бесконечно зацикливаться и проверять какое-то условие выхода. Например, вот почему
Console.ReadLine()
мне ни к чему. Нет проверки условий выхода.Что касается вышеизложенного, я все еще хочу, чтобы функция Main() была как можно более дружественной к ресурсам. Оставим в стороне отпечаток функции, которая проверяет условие выхода.
Thread.Sleep(0)
наверное хорошо - person leppie   schedule 13.09.2011Timer
? - person Neil Knight   schedule 13.09.2011Sleep(0)
отказывается от остатка текущего отрезка времени, но это все равно приводит к 100% загрузке ЦП. Так что здесь это не работает. - person CodesInChaos   schedule 13.09.2011Sleep(0)
приводит к тому, что «все % не используются где-либо еще», что иногда довольно круто, особенно при создании приложения, которое использует «оставшиеся ресурсы» для выполнения своей работы (например, SETI@Home или что-то еще). . - person Jonathan Dickinson   schedule 13.09.2011