Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:
'ли число простым
Private Function isItemPrime(ByVal potentialPrime As Long) As Boolean
'Если число - четное, значит, оно не является простым
If ((potentialPrime And 1) = 0) Then
Return False
End If
'Продолжать поиск до тех пор, пока не будет превышено значение
'квадратного корня из числа
Dim end_point_of_searchAs Long end_point_of_search = _
CLng(System.Math.Sqrt(potentialPrime) + 1)
Dim current_test_itemAs Long = 3
While (current_test_item <= end_point_of search)
'---------------------------------------------------------
'Проверить, не поступила ли команда прекратить выполнение!
'---------------------------------------------------------
If (getProcessingState <> ProcessingState.lookingForPrime) Then
Return False
End If
'Если число делится без остатка,
'значит, оно не является простым
If (potentialPrimeMod current_test_item = 0) Then
Return False
End If
'Увеличить число на два
current_test_item = current test_item + 2
End While
'Число является простым
Return True
End Function
End Class
Листинг 5.5. Тестовая программа, которая вызывает на выполнение приведенный выше код фонового потока, осуществляющего поиск простого числа
'----------------------------------------------------------
'Код, обрабатывающий событие щелчка на кнопке Button1 формы
'Вызвать из этого потока функцию поиска простого числа!
'(Это приведет к блокированию потока)
'----------------------------------------------------------
Private Sub Button1_Click(ByVal senderAs System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Dim testItem As Long
testItem = System.Convert.ToInt64("123456789012345")
Dim nextPrimeFinder As FindNextPrimeNumber
nextPrimeFinder = New FindNextPrimeNumber(testItem)
nextPrimeFinder.findNextHighestPrime
Dim nextHighestPrime As Long
nextHighestPrime = nextPrimeFinder.getPrime
MsgBox(CStr(nextHighestPrime))
'Сколько времени заняли вычисления?
Dim calculation_time As Integer
calculationtime = nextPrimeFinder.getTickCountDelta
MsgBox(CStr(calculation time) + " мс")
End Sub
'------------------------------------------------------------------------
'Код, обрабатывающий событие щелчка на кнопке Button2 формы
'Вызвать функцию поиска простого числа из другого потока!
'(Данный поток блокироваться не будет)
'Для отслеживания состояния выполнения задачи используем конечный автомат
'------------------------------------------------------------------------
Private Sub Button2_Click(ByVal senderAs System.Object, _
ByVal eAs System.EventArgs) Handles Button2.Click
Dim testItem As Long
testItem = System.Convert.ToInt64("123456789012345")
Dim nextPrimeFinderAs FindNextPrimeNumber
nextPrimeFinder = New FindNextPrimeNumber(testItem)
'-----------------------------------
'Выполнить обработку в другом потоке
'-----------------------------------
nextPrimeFinder.findNextHighestPrime_Async
'Войти в цикл и ожидать до тех пор, пока не будет найдено простое число
'или выполнение не будет прекращено
While ((nextPrimeFinder.getProcessingState <> _
FindNextPrimeNumber.ProcessingState.foundPrime) And _
(nextPrimeFinder.getProcessingState <> _
FindNextPrimeNumber.ProcessingState.aborted))
'ТОЛЬКО В ТЕСТОВОМ КОДЕ:
'Отобразить окно сообщений и предоставить пользователю возможность
'убрать его с экрана.
'Это позволяет организовать паузу
MsgBox("Поиск продолжается... Щелкните на кнопке OK")
'Мы могли бы прекратить поиск путем следующего вызова функции:
'nextPrimeFinder.setProcessingState(
' FindNextPrimeNumber.ProcessingState.requestAbort)
End While
Поделиться:
Популярные книги
Бандит
1. Петр Синельников
Фантастика:
фэнтези
7.92
рейтинг книги
Черный Маг Императора 20
20. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Война
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Черный Маг Императора 23
23. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Седьмая встреча
Проза:
современная проза
4.00
рейтинг книги
День поминовения
Проза:
современная проза
5.00
рейтинг книги
Ученик. Книга вторая
2. Ученик
Фантастика:
фэнтези
5.40
рейтинг книги
Я снова не князь! Книга XVII
17. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Лев Толстой
363. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Чужак из ниоткуда 2
2. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Печать мастера
6. Гибрид
Фантастика:
попаданцы
технофэнтези
аниме
фэнтези
6.00
рейтинг книги
Тринадцатый
1. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
6.80
рейтинг книги
Кодекс Охотника XXXI
31. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Слово мастера
11. Гибрид
Фантастика:
попаданцы
аниме
5.00