Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
//даже не должен начинаться
if (getProcessingState == ProcessingState.requestAbort) {
goto finished_looking;
}
//Состояние должно отвечать, что поиск продолжается
setProcessingState(ProcessingState.lookingForPrime);
m_startTickCount = System.Environment.TickCount;
long currentItem;
//Проверить, является ли число нечетным
if ((m_startPoint & 1) == 1) {
//Число является нечетным, начать поиск со следующего нечетного числа
currentItem = m_startPoint + 2;
} else {
//Число является четным, начать поиск со следующего нечетного числа
currentItem = m_startPoint + 1;
}
//Приступить к поиску простого числа
while(getProcessingState == ProcessingState.lookingForPrime) {
//B случае нахождения простого числа возвратить его
if (isItemPrime(currentItem) == true) {
m_NextHighestPrime = currentItem; //Обновить состояние
setProcessingState(ProcessingState.foundPrime);
}
currentItem = currentItem + 2;
}
finished_looking:
//Выход. К этому моменту либо от другого потока поступила
//команда прекратить поиск, либо было найдено и записано
//следующее наибольшее простое число
//Зафиксировать время
m_endTickCount = System.Environment.TickCount;
//Если поступил запрос прекратить выполнение,
//сообщить, что выполнение процесса прекращено
if (getProcessingState == ProcessingState.requestAbort) {
setProcessingState(ProcessingState.aborted);
}
}
//Конец функции
//Вспомогательная функция, которая проверяет, является
//ли число простым
private bool isItemPrime(long potentialPrime) {
//Если число — четное, значит, оно не является простым
if ((potentialPrime & 1) == 0) {
return false;
}
//Продолжать поиск до тех пор, пока не будет превышено
//значение квадратного корня из числа
long end_point_of_search;
end_point_of_search = (long) System.Math.Sqrt(potentialPrime) + 1;
long current_test_item = 3;
while (current_test_item <= end_point_of_search ) {
//----------------------------------------------------------
// Проверить, не поступила ли команда прекратить выполнение!
//----------------------------------------------------------
if (getProcessingState != ProcessingState.lookingForPrime) {
return false;
}
//Если число делится без остатка,
//значит, оно не является простым
if (potentialPrime % current_test_item == 0) {
return false;
}
//Увеличить число на два
current_test_item = current_test_item + 2;
}
//Число является простым return true;
}
} //конец класса
В листинге 5.5 содержится код, который может быть помещен в форму для тестирования приведенного выше алгоритма фоновой обработки.
Листинг 5.5. Тестовая программа, которая вызывает на выполнение приведенный выше код фонового потока, осуществляющего поиск простого числа
//-----------------------------------------------------------
// Код, обрабатывающий событие щелчка на кнопке Button1 формы
//
// Вызвать из этого потока функцию поиска простого числа!
// (Это приведет к блокированию потока)
//-----------------------------------------------------------
private void button1_Click(object sender, System.EventArgs e) {
long testItem;
testItem = System.Convert.ToInt64("123456789012345");
FindNextPrimeNumber nextPrimeFinder;
nextPrimeFinder = new FindNextPrimeNumber(testItem);
nextPrimeFinder.findNextHighestPrime;
long nextHighestPrime;
nextHighestPrime = nextPrimeFinder.getPrime;
System.Windows.Forms.MessageBox.Show(System.Convert.ToString(nextHighestPrime));
//Сколько времени заняли вычисления?
int calculation_time;
calculation_time = nextPrimeFinder.getTickCountDelta;
System.Windows.Forms.MessageBox.Show(System.Convert.ToString(calculation_time) + " мс");
Поделиться:
Популярные книги
Тринадцатый V
5. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Принадлежать им
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Газлайтер. Том 25
25. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Охотник на демонов
2. Живой лёд
Фантастика:
боевая фантастика
5.83
рейтинг книги
Студиозус 2
4. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Вперед в прошлое 10
10. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Князь
3. Варяг
Фантастика:
альтернативная история
9.15
рейтинг книги
Отмороженный 11.0
11. Отмороженный
Фантастика:
боевая фантастика
рпг
попаданцы
фантастика: прочее
фэнтези
5.00
рейтинг книги
Горячий старт. Часть 3
3. Бесконечная Империя Вечности
Фантастика:
фэнтези
рпг
попаданцы
5.00
рейтинг книги
Идеальный мир для Лекаря 7
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Полигон
S.T.A.L.K.E.R.
Фантастика:
боевая фантастика
7.78
рейтинг книги
Личный аптекарь императора. Том 5
5. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
7.50
рейтинг книги
Дважды одаренный. Том VI
6. Дважды одаренный
Фантастика:
аниме
альтернативная история
фэнтези
фантастика: прочее
5.00
рейтинг книги
Кодекс Охотника. Книга VII
7. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.75