Место общения программистов C#
Anonymous
Обычная практика опроса внутри служб Windows
Сообщение
Anonymous » 27 май 2024, 23:48
Обычно советуют использовать что-то вроде этого (используя таймауты):
Код: Выделить всё
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))
и
без завершения события?
Я читал, что тайм-ауты используются для уменьшения загрузки процессора. Является ли использование опроса без таймаутов плохим выбором?
Подробнее здесь:
https://stackoverflow.com/questions/330 ... s-services
1716842936
Anonymous
Обычно советуют использовать что-то вроде этого (используя таймауты): [code]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); } } [/code] где функция Poll определена следующим образом: [code]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; } } [/code] [list] [*]Эти конструкции по существу равны: [code]while(!this.finishedEvent.WaitOne(0, false))[/code] и [code]while(true)[/code] без завершения события? [*]Я читал, что тайм-ауты используются для уменьшения загрузки процессора. Является ли использование опроса без таймаутов плохим выбором? [/list] Подробнее здесь: [url]https://stackoverflow.com/questions/33015657/the-common-practice-for-polling-inside-windows-services[/url]