Чтение онлайн

на главную - закладки

Жанры

Программирование мобильных устройств на платформе .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) + " мс");

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

Источник

Билик Дмитрий Александрович
11. Бедовый
Фантастика:
юмористическое фэнтези
городское фэнтези
мистика
7.00
рейтинг книги
Источник

Лекарь Империи

Карелин Сергей Витальевич
1. Лекарь Империи
Фантастика:
городское фэнтези
аниме
дорама
фэнтези
попаданцы
5.00
рейтинг книги
Лекарь Империи

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Я спас СССР! том 1

Вязовский Алексей
1. Я спас СССР
Фантастика:
альтернативная история
6.57
рейтинг книги
Я спас СССР! том 1

Бастард Императора. Том 11

Орлов Андрей Юрьевич
11. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 11

Одержимый

Джеймс Питер
Top Thriller
Детективы:
триллеры
маньяки
8.67
рейтинг книги
Одержимый

Бастард Императора. Том 4

Орлов Андрей Юрьевич
4. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 4

Я уже граф. Книга VII

Дрейк Сириус
7. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я уже граф. Книга VII

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

"Искажающие реальность" Компиляция. Книги 1-14

Атаманов Михаил Александрович
Искажающие реальность
Фантастика:
боевая фантастика
космическая фантастика
киберпанк
рпг
5.00
рейтинг книги
Искажающие реальность Компиляция. Книги 1-14

Родословная. Том 3

Ткачев Андрей Юрьевич
3. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Родословная. Том 3

Третий. Том 4

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 4

Травник

Назимов Константин Геннадьевич
1. Травник
Фантастика:
фэнтези
5.00
рейтинг книги
Травник