Вход/Регистрация
Программирование мобильных устройств на платформе .NET Compact Framework
вернуться

Салмре Иво

Шрифт:

If ((m_startPointAnd 1) = 1) Then

'Число является нечетным, начать поиск со следующего нечетного числа

currentItem = m_startPoint + 2

Else

'Число является четным, начать поиск со следующего нечетного числа

currentItem = m_startPoint + 1

End If

'Приступить к поиску простого числа

While (getProcessingState = ProcessingState.lookingForPrime)

'В случае нахождения простого числа возвратить его

If (isItemPrime(currentItem) = True) Then

m_NextHighestPrime = currentItem

'Обновить состояние

setProcessingState(ProcessingState.foundPrime)

End If

currentItem = currentItem + 2

End While

finished_looking:

'Выход. К этому моменту либо от другого потока поступила

'команда прекратить поиск, либо было найдено и записано

'следующее наибольшее простое число

'Зафиксировать время

m_endTickCount = System.Environment.TickCount

'Если поступил запрос прекратить выполнение,

'сообщить, что выполнение процесса прекращено

If (getProcessingState = ProcessingState.requestAbort) Then

setProcessingState(ProcessingState.aborted)

End If

End Sub

'Вспомогательная функция, которая проверяет, является

'ли число простым

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

  • Читать дальше
  • 1
  • ...
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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