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

Салмре Иво

Шрифт:

}

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

//Вычисления продолжаются. Информировать

//пользователя о состоянии выполнения

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

//Получить два выходных значения

long numberCalculationsToFar;

long currentItem;

m_findNextPrimeNumber.getExecutionProgressInfo(out numberCalculationsToFar,out currentItem);

setCalculationStatusText("In progress. Looking at: " +

currentItem.ToString + ". " +

numberCalculationsToFar.ToString +

" calculations done for you so far!");

// setCalculationStatusText("Вычисления продолжаются. Поиск в области: " +

// currentItem.ToString + ". " +

// "Для вас выполнено " +

// numberCalculationsToFar.ToString +

// " расчетов!");

}

Листинг 9.5. Код класса FindNextPrimeNumber.cs

using System;

public class FindNextPrimeNumber {

//Перечисляем возможные состояния

public enum ProcessingState {

notYetStarted,

waitingToStartAsync,

lookingForPrime,

foundPrime,

requestAbort,

aborted

}

long m_startPoint;

long m_NextHighestPrime;

//Поиск какого количества элементов выполнен?

long m_comparisonsSoFar;

//Для какого элемента сейчас выполняется поиск простого числа?

long m_CurrentNumberBeingExamined;

//Вызывается для обновления информации о состоянии выполнения

public void getExecutionProgressInfo(out long numberCalculationsSoFar, out long currentItemBeingLookedAt) {

//ПРИМЕЧАНИЕ. Мы используем блокирование потока для уверенности в том,

//что эти значения не считываются во время выполнения операции

//их записи. Поскольку доступ к m_comparisonsSoFar

//и m_CurrentNumberBeingExamined могут осуществлять

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

//операция записи/считывания должна синхронизироваться с "блокировкой",

//что будет гарантировать "атомарность" этих операций

lock (this) {

numberCalculationsSoFar = m_comparisonsSoFar;

currentItemBeingLookedAt = m_CurrentNumberBeingExamined;

}

}

ProcessingState m_processingState;

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

//Простейший конечный автомат

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

public void setProcessingState(ProcessingState nextState) {

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

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

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

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

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

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

(m_processingState == ProcessingState.foundPrime)) {

return;

}

//Разрешить изменение состояния

m_processingState = nextState;

}

public ProcessingState getProcessingState {

get {return m_processingState;}

}

  • Читать дальше
  • 1
  • ...
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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