Чтение онлайн

ЖАНРЫ

Программирование мобильных устройств на платформе .NET Compact Framework
Шрифт:

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)

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

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

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

If (m_processingState <> ProcessingState.lookingForPrime) Then

Return False

End If

'Если число делится без остатка,

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

If (potentialPrime Mod current_test_item = 0) Then

Return False

End If

'Увеличить число на два

current_test_item = current test_item + 2

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

'Увеличить число проверенных элементов

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

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

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

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

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

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

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

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

SyncLock (Me)

m_CurrentNumberBeingExamined = potentialPrime

m_comparisonsSoFar = m_comparisonsSoFar + 1

End SyncLock

End While

'Число является простым

Return True

End Function

End Class

Примеры к главе 10 (производительность и XML)

Листинг 10.1. Использование XML DOM для сохранения данных в файле и их загрузки

Option Strict On

Option Compare Binary

Imports System

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

'Демонстрирует сохранение и загрузку файлов с

'использованием объектной модели документа XML

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

Public Class SaveAndLoadXML_UseDOM

'XML-дескрипторы, которые мы будем использовать в нашем документе

Const XML_ROOT_TAG As String = "AllMyData"

Const XML_USERINFO_TAG As String = "UserInfo"

Const XML_USERID_TAG As String = "UserID"

Const XML_NAMEINFO_TAG As String = "Name"

Const XML_FIRSTNAME _TAG As String = "FirstName"

Const XML_LASTNAME_TAG As String = "LastName"

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

'Загружает пользовательское состояние

' [in] fileName: Имя файла, используемого для сохранения данных

' [out] userId: Загруженный идентификатор пользователя

' [out] firstName: Загруженное имя пользователя

' [out] lastName: Загруженная фамилия пользователя

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

Public Shared Sub XML_LoadUserInfo(ByVal fileName As String, _

ByRef userId As Integer, ByRef firstName As String, _

ByRef lastName As String)

'Начинаем с нулевых значений

userId = 0

firstName = ""

lastName = ""

'Предполагаем, что данные еще не загружены

Dim gotUserInfoData As Boolean = False

Dim xmlDocument As System.Xml.XmlDocument = _

New System.Xml.XmlDocument

xmlDocument.Load(fileName)

'Получить корневой узел

Dim rootElement As System.Xml.XmlElement

rootElement = _

CType(xmlDocument.ChildNodes(0), System.Xml.XmlElement)

'Убедиться в том, что корневой узел согласуется с ожидаемым текстом,

'ибо противное означает, что мы имеем дело с каким-то другим XML-файлом

If (rootElement.Name <> XML_ROOT_TAG) Then

Throw New Exception("Тип корневого узла не совпадает с ожидаемым!")

End If

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

'Простой конечный автомат для итеративного обхода всех узлов

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

Dim childOf_RootNode As System.Xml.XmlElement

For Each childOf_RootNode In _

rootElement.ChildNodes

'Если это узел UserInfo, то мы хотим просмотреть его содержимое

Поделиться с друзьями: