Книга: Программирование мобильных устройств на платформе .NET Compact Framework
Листинг 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) + " мс");
}
//------------------------------------------------------------------------
// Код, обрабатывающий событие щелчка на кнопке Button2 формы
//
// Вызвать функцию поиска простого числа из другого потока!
// (Данный поток блокироваться не будет)
// Для отслеживания состояния выполнения задачи используем конечный автомат
//-------------------------------------------------------------------------
private void button2_Click(object sender, System.EventArgs e) {
long testItem;
testItem = System.Convert.ToInt64("123456789012345");
FindNextPrimeNumber nextPrimeFinder;
nextPrimeFinder = new FindNextPrimeNumber(testItem);
//------------------------------------
// Выполнить обработку в другом потоке
//------------------------------------
nextPrimeFinder.findNextHighestPrime_Async();
//Войти в цикл и ожидать до тех пор, пока не будет найдено
//простое число или выполнение не будет прекращено
while ((nextPrimeFinder.getProcessingState() != FindNextPrimeNumber.ProcessingState.foundPrime) &&
(nextPrimeFinder.getProcessingState() != FindNextPrimeNumber.ProcessingState.aborted)) {
//ТОЛЬКО В ТЕСТОВОМ КОДЕ:
//Отобразить окно сообщений и предоставить пользователю
//возможность убрать его с экрана.
//Это позволяет организовать паузу!
System.Windows.Forms.MessageBox.Show("Поиск продолжается... Щелкните на кнопке OK");
//Мы могли бы прекратить поиск путем следующего вызова функции:
//nextPrimeFinder.setProcessingState(
// FindNextPrimeNumber.ProcessingState.requestAbort);
}
//Осуществить корректный выход в случае прекращения поиска
if (nextPrimeFinder.getProcessingState() == FindNextPrimeNumber.ProcessingState.aborted) {
System.Windows.Forms.MessageBox.Show("Поиск прекращен!");
return;
}
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) + " мс");
}
Для выполнения примера с использованием указанного в листинге начального числа (123456789012345) на моем эмуляторе Pocket РС требовалось от 10 до 20 секунд. Исследуйте зависимость времени вычислений от количества цифр в начальном числе. (Как правило, с увеличением количества цифр время вычислений увеличивается.)
- Стиль программирования: использование операторов goto и полных путей доступа в пространствах имен
- Листинг 5.4. Код программы нахождения простых чисел, предназначенный для выполнения фоновым потоком
- Листинг 5.5. Тестовая программа, которая вызывает на выполнение приведенный выше код фонового потока, осуществляющего поиск простого числа
- НА ЗАМЕТКУ
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Повышение производительности приложений с помощью хранимых процедур
- При копировании с жесткого диска на «флэшку» иногда появляется сообщение о дополнительной присоединенной информации, кот...
- Дополнительные национальные кодовые страницы и порядки сортировки
- Глава 5 Агрессивные формы кода и борьба с ними
- Стиль написания исходного кода
- Числа с плавающей точкой
- 6. Совершенные числа
- 1.4. Кодирование информации
- 1.4.1. Кодирование во время выполнения
- Три способа кодирования звука
- 13.3.4. Поиск и замена текста