Прервать спящую нитьC#

Место общения программистов C#
Anonymous
 Прервать спящую нить

Сообщение Anonymous »

Есть ли способ прервать спящую нить? Если у меня есть код, аналогичный этому. < /P>

while(true){
if(DateTime.Now.Subtract(_lastExecuteTime).TotalHours > 1){
DoWork();
_lastExecuteTime = DateTime.Now();
continue;
}
Thread.Sleep(10000) //Sleep 10 seconds
if(somethingIndicatingQuit){
break;
}

}
< /code>

Я хочу выполнять dowork () каждый час. Итак, я хотел бы спать немного дольше, чем 10 секунд. Скажите, проверьте каждые 10 минут или около того. Однако, если установить мой сон на 10 минут, и я хочу убить эту фоновую задачу, я должен ждать возобновления сна. Я могу опубликовать больше кода, если это необходимо. < /P>

ОК, я собираюсь добавить немного более полного кода, так как я думаю, что он ответит на некоторые вопросы. < /P>

private readonly ManualResetEvent _shutdownEvent = new ManualResetEvent(false);
private readonly ManualResetEvent _pauseEvent = new ManualResetEvent(true);
private Thread _backGroundWorkerThread;

//This starts our work
public void Start() {
_backGroundWorkerThread = new Thread(ExecuteWorker) {IsBackground = true, Name = WorkerName + "_Thread"};
_shutdownEvent.Reset();
_backGroundWorkerThread.Start();
}
internal void Stop() {
//Signal the shutdown event
_shutdownEvent.Set();

//Make sure to resume any paused threads
_pauseEvent.Set();

//Wait for the thread to exit
_backGroundWorkerThread.Join();

}

private void ExecuteWorker() {
while (true) {
_pauseEvent.WaitOne(Timeout.Infinite);

//This kills our process
if (_shutdownEvent.WaitOne(0)) {
break;
}

if (!_worker.IsReadyToExecute) {
//sleep 5 seconds before checking again. If we go any longer we keep our service from shutting down when it needs to.
Thread.Sleep(5000);
continue;
}
DoWork();

}
}
< /code>

Моя проблема здесь, < /p>

_backGroundWorkerThread.Join();
< /code>

Это ждет потока.

Подробнее здесь: https://stackoverflow.com/questions/744 ... ing-thread

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