Программирование мобильных устройств на платформе .NET Compact Framework (Салмре) - страница 547


> 'Состояние должно отвечать, что поиск продолжается

> setProcessingState(ProcessingState.waitingToStartAsync)

> newThread.Start()

>End Sub


>'-------------------------------------------------------------

>'Основной рабочий поток. Этот поток запускает поиск очередного

>'простого числа и выполняется до тех пор, пока не произойдет

>'одно из следующих двух событий:

>' (а) найдено очередное простое число

>' (b) от внешнего (по отношению к данному) потока поступила

>' команда прекратить выполнение

>'--------------------------------------------------------------

>Public Sub findNextHighestPrime()

> 'Если поступила команда прекратить выполнение, то поиск даже

> 'не должен начинаться

> If (m_processingState = ProcessingState.requestAbort) Then

>  GoTo finished_looking

> End If


> 'Состояние должно отвечать, что поиск продолжается

> setProcessingState(ProcessingState.lookingForPrime)


> Dim currentItem As Long

> 'Проверить, является ли число нечетным

> If ((m_startPoint And 1) = 1) Then

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

>  currentItem = m_startPoint + 2

> Else

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

>  currentItem = m_startPoint + 1

> End If


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

> While (m_processingState = ProcessingState.lookingForPrime)

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

>  If (isItemPrime(currentItem) = True) Then

>   m_NextHighestPrime = currentItem

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

>   setProcessingState(ProcessingState.foundPrime)

>  End If

>  currentItem = currentItem + 2

> End While

>finished_looking:

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

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

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

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

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

> If (m_processingState = 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_search As Long end_point_of_search = _

>  CLng(System.Math.Sqrt(potentialPrime)) + 1

> Dim current_test_item As Long = 3

> While (current_test_item <= end_point_of_search)

>  '---------------------------------------------------------

>  'Проверить, не поступила ли команда прекратить выполнение!