könnten Sie die Autoreset wie folgt verwenden:
// Somewhere else in the code
using System;
using System.Threading;
// In the class or whever appropriate
static AutoResetEvent autoEvent = new AutoResetEvent(false);
void MyWorkerThread()
{
while(1)
{
// Wait for work method to signal.
if(autoEvent.WaitOne(30000, false))
{
// Signalled time to quit
return;
}
else
{
// grab a lock
// do the work
// Whatever...
}
}
}
Ein etwas „intelligente“ Lösung ist, wie in Pseudo-Code folgen:
using System;
using System.Diagnostics;
using System.Threading;
// In the class or whever appropriate
static AutoResetEvent autoEvent = new AutoResetEvent(false);
void MyWorkerThread()
{
Stopwatch stopWatch = new Stopwatch();
TimeSpan Second30 = new TimeSpan(0,0,30);
TimeSpan SecondsZero = new TimeSpan(0);
TimeSpan waitTime = Second30 - SecondsZero;
TimeSpan interval;
while(1)
{
// Wait for work method to signal.
if(autoEvent.WaitOne(waitTime, false))
{
// Signalled time to quit
return;
}
else
{
stopWatch.Start();
// grab a lock
// do the work
// Whatever...
stopwatch.stop();
interval = stopwatch.Elapsed;
if (interval < Seconds30)
{
waitTime = Seconds30 - interval;
}
else
{
waitTime = SecondsZero;
}
}
}
}
davon Entweder hat den Vorteil, dass Sie Herunterfahren können der Thread, nur durch die Signalisierung des Ereignisses.
bearbeiten
Ich sollte hinzufügen, dass dieser Code die Annahme macht, dass Sie nur eine dieser MyWorkerThreads() ausgeführt haben, sonst würden sie gleichzeitig ausgeführt werden.
Ich zweitens diesen Ansatz - "es könnte besser sein, einen Timer zu starten, nachdem Sie den Vorgang abgeschlossen sind ..." – hitec
Ich drittens diesen Ansatz. Sie können die Zeitverzögerung auch dynamisch berechnen, um näher an die 30 Sekunden zu kommen. Deaktivieren Sie den Timer, holen Sie die Systemzeit, aktualisieren Sie die Datenbank und initialisieren Sie den nächsten Timer 30 Sekunden nach der gespeicherten Zeit. Mit einer minimalen Zeitverzögerung für die Sicherheit. – mghie
wie wir sicher sein können, dass der Vorgang in 5 Sekunden abgeschlossen ist. upvote summiert sich mehr als @jsw, aber es sieht effektiver aus. –