Вход/Регистрация
Программирование мобильных устройств на платформе .NET Compact Framework
вернуться

Салмре Иво

Шрифт:

//это важно сделать еще до того, как будет запущен поток!)

setProcessingState(ProcessingState.waitingToStartAsync);

//Дать ОС команду начать выполнение нового потока в асинхронном режиме

newThread.Start;

//Возвратить управление функции, вызывающей этот поток

 }

 //---------------------------------------------

 //Эта функция является точкой входа, вызываемой

 //для выполнения в новом потоке

 //---------------------------------------------

 private void ThreadStartPoint {

//Установить состояние обработки, соответствующее

//выполнению функции в новом потоке!

setProcessingState(ProcessingState.running);

//Запустить на выполнение пользовательский код и передать указатель в

//наш класс, чтобы этот код мог периодически проверять, не поступил ли

//запрос на прекращение выполнения

m_CallFunction(this);

//Если выполнение не было отменено, изменить состояние таким образом,

//чтобы оно соответствовало успешному завершению

if (m_processingState != ProcessingState.aborted) {

//Обозначить завершение выполнения

setProcessingState(ProcessingState.done);

}

//Выйти из потока...

 }

 //----------------

 //Конечный автомат

 //----------------

 public void setProcessingState(ProcessingState nextState) {

//B любой момент времени только одному потоку выполнения

//могут быть разрешены попытки изменить состояние

lock(m_useForStateMachineLock) {

//B случае попытки повторного вхождения в текущее состояние

//никакие дополнительные действия не выполняются

if (m_processingState == nextState) {

return;

}

//------------------------------------------------------

//Простейший защитный код, гарантирующий

//невозможность перехода в другое состояние, если задача

//либо успешно завершена, либо успешно отменена

//------------------------------------------------------

if ((m_processingState == ProcessingState.aborted) ||

(m_processingState == ProcessingState.done)) {

return;

}

//Убедиться в допустимости данного изменения состояния

switch (nextState) {

case ProcessingState.notYetStarted:

throw new Exception("Переход в состояние 'notYetStarted' невозможен");

case ProcessingState.waitingToStartAsync:

if (m_processingState != ProcessingState.notYetStarted) {

throw new Exception("Недопустимое изменение состояния");

}

break;

case ProcessingState.running:

if (m_processingState != ProcessingState.waitingToStartAsync) {

throw new Exception("Недопустимое изменение состояния");

}

break;

case ProcessingState.done:

//Мы можем завершить работу лишь тогда, когда она выполняется.

//Это возможно также в тех случаях, когда пользователь затребовал

//отмену выполнения, но работа к этому моменту уже была закончена

if ((m_processingState != ProcessingState.running) &&

  • Читать дальше
  • 1
  • ...
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: