Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
//Если выполнение было отменено, освободить объект,
//осуществляющий поиск, и выключить таймер
//-------------------------------------------------
if (m_findNextPrimeNumber.getProcessingState ==
FindNextPrimeNumber.ProcessingState.aborted) {
timer1.Enabled = false;
m_findNextPrimeNumber = null;
setCalculationStatusText("Prime search aborted");
// setCalculationStatusText("поиск простого числа отменен");
return;
}
//----------------------------------
//Удалось ли найти правильный ответ?
//----------------------------------
if (m_findNextPrimeNumber.getProcessingState ==
FindNextPrimeNumber.ProcessingState.foundPrime) {
timer1.Enabled = false;
//Отобразить результат
setCalculationStatusText("Found! Next Prime = " + m_findNextPrimeNumber.getPrime.ToString);
// setCalculationStatusText("Чиcлo найдено! Следующее простое число = " +
// m_findNextPrimeNumber.getPrime.ToString);
m_findNextPrimeNumber = null;
return;
}
//--------------------------------------
//Вычисления продолжаются. Информировать
//пользователя о состоянии выполнения
//--------------------------------------
//Получить два выходных значения
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) ||
Поделиться:
Популярные книги
Агенты ВКС
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Контртеррор
6. Ермак
Фантастика:
альтернативная история
5.00
рейтинг книги
Древесный маг Орловского княжества
1. Орловское княжество
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Тринадцатый X
10. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Убийца
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Черный маг императора 3
3. Черный маг императора
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Князь Андер Арес 3
3. Андер Арес
Фантастика:
рпг
аниме
фэнтези
5.00
рейтинг книги
Снега
Поэзия:
драматургия
5.00
рейтинг книги
Новые горизонты
5. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 13
13. История Телепата
Фантастика:
боевая фантастика
аниме
попаданцы
фэнтези
5.00
рейтинг книги
Страж Кодекса. Книга V
5. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эфемер
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Бастард Императора. Том 3
3. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Распутье
Сибириада
Проза:
военная проза
историческая проза
5.00