Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
(m_processingState == ProcessingState.foundPrime)) {
return;
}
//Разрешить изменение состояния
m_processingState = nextState;
}
public ProcessingState getProcessingState {
get {return m_processingState;}
}
//------------------------
//Возвращает простое число
//------------------------
public long getPrime {
if (m_processingState != ProcessingState.foundPrime) {
throw new Exception("простое число еще не найдено!");
}
return m_NextHighestPrime;
}
//Конструктор класса
public FindNextPrimeNumber(long startPoint) {
setProcessingState(ProcessingState.notYetStarted);
m_startPoint = startPoint;
}
//-----------------------------------------------------------
//Создает новый рабочий поток, который будет вызывать функцию
// "findNextHighestPrime"
//-----------------------------------------------------------
public void findNextHighestPrime_Async {
System.Threading.ThreadStart threadStart;
threadStart = new System.Threading.ThreadStart(findNextHighestPrime);
System.Threading.Thread newThread;
newThread = new System.Threading.Thread(threadStart);
//Состояние должно отвечать, что поиск продолжается
setProcessingState(ProcessingState.waitingToStartAsync);
newThread.Start;
}
//-------------------------------------------------------------
//Основной рабочий поток. Этот поток запускает поиск очередного
//простого числа и выполняется до тех пор, пока не произойдет
//одно из следующих двух событий:
// (а) найдено очередное простое число
// (b) от внешнего (по отношению к данному) потока поступила
// команда прекратить выполнение
//-------------------------------------------------------------
public void findNextHighestPrime {
//Если поступила команда прекратить выполнение, то поиск
//даже не должен начинаться
if (m_processingState == ProcessingState.requestAbort) {
goto finished_looking;
}
//Состояние должно отвечать, что поиск продолжается
setProcessingState(ProcessingState.lookingForPrime);
long currentItem;
//Проверить, является ли число нечетным
if ((m_startPoint & 1) == 1) {
//Число является нечетным, начать поиск со следующего нечетного числа
currentItem = m_startPoint + 2;
} else {
//Число является четным, начать поиск со следующего нечетного числа
currentItem = m_startPoint + 1;
}
//Приступить к поиску простого числа
while (m_processingState == ProcessingState.lookingForPrime) {
//B случае нахождения простого числа возвратить его
if (isItemPrime(currentItem) == true) {
m_NextHighestPrime = currentItem; //Обновить состояние
setProcessingState(ProcessingState.foundPrime);
}
currentItem = currentItem + 2;
}
finished_looking:
//Выход. К этому моменту либо от другого потока поступила
//команда прекратить поиск, либо было найдено и записано
//следующее наибольшее простое число
//Если поступил запрос прекратить выполнение,
//сообщить, что выполнение процесса прекращено
if (m_processingState == ProcessingState.requestAbort) {
setProcessingState(ProcessingState.aborted);
}
}
//Вспомогательная функция, которая проверяет, является
//ли число простым
private bool isItemPrime(long potentialPrime) {
//Если число — четное, значит, оно не является простым
if ((potentialPrime & 1) == 0) {
return false;
}
//Продолжать поиск до тех пор, пока не будет превышено
Поделиться:
Популярные книги
Я все еще барон
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00
рейтинг книги
Хозяин Теней 2
2. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Уникум
1. Уникум
Фантастика:
альтернативная история
4.60
рейтинг книги
Боярышня Дуняша 2
2. Боярышня
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 3
3. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Белый Волк
2. Викинг
Приключения:
исторические приключения
9.12
рейтинг книги
Эволюционер из трущоб. Том 5
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Конец детства (сборник)
Фантастика:
научная фантастика
7.00
рейтинг книги
Властелин Севера
3. Саксонские хроники
Приключения:
исторические приключения
8.67
рейтинг книги
Двойник Короля 5
5. Двойник Короля
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Старый, но крепкий 7
7. Культивация без насилия
Фантастика:
рпг
уся
фэнтези
5.00
рейтинг книги
Газлайтер. Том 5
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Матабар VIII
8. Матабар
Проза:
магический реализм
5.00
рейтинг книги
Агенты ВКС
3. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00