Обычная практика опроса внутри служб WindowsC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Обычная практика опроса внутри служб Windows

Сообщение Anonymous »

Обычно советуют использовать что-то вроде этого (используя таймауты):

Код: Выделить всё

Thread workerThread = null;
AutoResetEvent finishedEvent = new AutoResetEvent(false);

protected override void OnStart(string[] args) {
this.finishedEvent.Reset();
this.workerThread = new Thread(this.Poll);
this.workerThread.Start();
}

protected override void OnStop() {
this.finishedEvent.Set();
if(!this.workerThread.Join(2000)) {
this.RequestAdditionalTime(5000);
}
}
где функция Poll определена следующим образом:

Код: Выделить всё

private void Poll() {
try {
var timeout = Int32.Parse(ConfigurationManager.AppSettings["pollingTimeout"]);
while(!this.finishedEvent.WaitOne(timeout, false)) {
// do polling
}
}
catch(Exception ex) {
Logger.Log.Fatal(ex);
throw;
}
}
  • Эти конструкции по существу равны:

    Код: Выделить всё

    while(!this.finishedEvent.WaitOne(0, false))
    и

    Код: Выделить всё

    while(true)
    без завершения события?
  • Я читал, что тайм-ауты используются для уменьшения загрузки процессора. Является ли использование опроса без таймаутов плохим выбором?


Подробнее здесь: https://stackoverflow.com/questions/330 ... s-services
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»