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

Салмре Иво

Шрифт:

End Sub

Листинг 9.5. Код класса FindNextPrimeNumber.cs

Option Strict On

Imports System

Public Class FindNextPrimeNumber

'Перечисляем возможные состояния

Public Enum ProcessingState

notYetStarted

waitingToStartAsync

lookingForPrime

foundPrime

requestAbort

aborted

End Enum

Private m_startPoint As Long

Private m_NextHighestPrime As Long

'Поиск какого количества элементов выполнен?

Private m_comparisonsSoFar As Long

'Для какого элемента сейчас выполняется поиск простого числа?

Private m_CurrentNumberBeingExamined As Long

'Вызывается для обновления информации о состоянии выполнения

Public Sub getExecutionProgressInfo( _

ByRef numberCalculationsSoFar As Long, _

ByRef currentItemBeingLookedAt As Long)

'ПРИМЕЧАНИЕ. Мы используем блокирование потока для уверенности в том,

'что эти значения не считываются во время выполнения операции

'их записи. Поскольку доступ к m_comparisonsSoFar

'и m_CurrentNumberBeingExamined могут осуществлять

'одновременно несколько потоков, любая выполняемая над ними

'операция записи/считывания должна синхронизироваться с "блокировкой",

'что будет гарантировать "атомарность" этих операций

SyncLock (Me)

numberCalculationsSoFar = m_comparisonsSoFar

currentItemBeingLookedAt = m_CurrentNumberBeingExamined

End SyncLock

End Sub

Private m_processingState As ProcessingState

'---------------------------

'Простейший конечный автомат

'---------------------------

Public Sub setProcessingState(ByVal nextState As _

ProcessingState)

'Простейший защитный код, гарантирующий

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

'либо успешно завершена, либо успешно отменена

If ((m_processingState = ProcessingState.aborted) _

OrElse (m_processingState = ProcessingState.foundPrime)) Then

Return

End If

'Разрешить изменение состояния

m_processingState = nextState

End Sub

Public ReadOnly Property getProcessingState As ProcessingState

Get

Return m_processingState

End Get

End Property

'------------------------

'Возвращает простое число

'------------------------

Public Function getPrime As Long

If (m_processingState <> ProcessingState.foundPrime) Then

Throw New Exception("Простое число еще не найдено!")

End If

Return m_NextHighestPrime

End Function

'Конструктор класса

Public Sub New(ByVal startPoint As Long)

setProcessingState(ProcessingState.notYetStarted)

m_startPoint = startPoint

End Sub

'-----------------------------------------------------------

'Создает новый рабочий поток, который будет вызывать функцию

'findNextHighestPrime

  • Читать дальше
  • 1
  • ...
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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