Для управления, глобальными таблицами атомов имеется аналогичный набор функций управления атомами

11350
знаков
0
таблиц
0
изображений

2. Для управления, глобальными таблицами атомов имеется аналогичный набор функций управления атомами.

Например, функция GlobalAddAtom() добавляет атомы в глобальную таблицу атомов подобно тому, как это делает функция AddAtom() по отношению к локальной таблицы атомов.

К другим функциям управления глобальными таблицами атомов относятся GlobalDeleteAtom(), GlobalFindAtom() и GlobalGetAtomName().

И последняя функция управления атомами InitAtomTable() устанавливает количество элементов верхнего уровня в локальной таблице атомов в соответствие с заданным значением.

По умолчанию количество элементов верхнего уровня как в локальной, так и в глобальной таблице атомов равно 37.

Это отнюдь не означает, что в таблице можно разместить только 37 атомов, а скорее отражает тот факт, что вероятность конфликта, а значит, и замедления поиска в таблице, оказывается больше при наличии в таблице 37 элементов, чем, скажем, 80 элементов.

Прежде чем добавлять атомы в локальную таблицу атомов, необходимо сначала вызвать функцию InitAtomTable. Кроме того, значение, передаваемой этой функции, всегда должно быть простым числом.

Если простое число не используется, тогда вероятность конфликтов возрастет, а значит и замедлится поиск в таблице. Синтаксис функции FindAtom() следующий

BOOL InitAtomTable (DWORD nSize)

Параметры:

nSize – количество элементов верхнего уровня, устанавливаемых в локальной таблице атомов.

Возвращаемое значение. При успешном выполнении – TRUE, в противном случае – FALSE.

Соответствующая функция для установки числа элементов верхнего уровня в глобальных атомных таблицах отсутствует.

Применение глобальных атомов для обмена данными

Несмотря на то что глобальные атомы применяются исключительно для DDE, тем не менее, атомы можно без труда использовать и для обмена строковыми данными между отдельными экземплярами конкретного приложения.

Для этого отправитель вводит строку в глобальную таблицу атомов с помощью функции GlobalAddAtom(), a затем устанавливает параметр сообщения в соответствие со значением атома.

Получатель применяет функцию GtobalFindAtom() для получения содержимого переданных данных и удаляет соответствующий атом с помощью функции GlobalDeleteAtom().

При этом очень важно удалить атом, иначе глобальная таблица атомов окажется переполненной ненужными элементами.

Например.

// Имя сохраняемого атома.

LPCTSTR szAtom = "An atom.";

LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )

{

switch( uMsg )

{

case WM_CREATE:

// Увеличить до 73 число элементов в верхней части таблицы атомов.

InitAtomTable( 73 );

break;

case WM_PAINT:

{

// Показать результаты поиска атома.

static PAINTSTRUCT ps;

static char szWorkArea[33];

static char szBuffer[128];

static ATOM aAnAtom;

aAnAtom = INVALID_ATOM;

BeginPaint( hWnd, &ps );

if (aAnAtom = FindAtom( szAtom ))

{

GetAtomName( aAnAtom, szWorkArea, 32 );

wsprintf( szBuffer, "Атом не найден.", szWorkArea );

}

else

lstrcpy( szBuffer, "Атом может быть добавлен." );

TextOut( ps.hdc, 0, 0, szBuffer, lstrlen( szBuffer ) );

EndPaint( hWnd, &ps );

}

break ;

case WM_COMMAND :

switch( LOWORD( wParam ) )

{

case IDM_ADD:

// Ввести атом.

AddAtom( szAtom );

InvalidateRect( hWnd, NULL, TRUE );

break;

case IDM_DELETE:

// Найти и удалить атом.

if ( FindAtom( szAtom ) )

DeleteAtom( FindAtom( szAtom ) );

InvalidateRect( hWnd, NULL, TRUE );

break;

Целочисленные атомы

В Windows 9.x и Windows NT/2000 поддерживаются также средства сохранения строк с десятичными числами в таблицах атомов. Атомы, которые представляют собой числовые строки, называются целочисленными (целыми) атомами.

Допустимыми являются только значения из диапазона 1-49151 (1-BFFFh).

Чтобы определить, может ли целое значение быть размещено в таблице атомов, его следует проверить, сравнив с константой MAXINATOM. Еще одна макрокоманда MAKEINATOM, преобразует число в целый атом.

В листинге показано, каким образом используются целые атомы. Следует заметить, что строка, сохраняемая в таблице атомов, на самом деле будет содержать цифры десятичного представления целого числа, которому предшествует знак "решетки".

Листинг. Применение целых атомов

char szStoredString[6];

WORD wValue = 1000;

ATOM aValue = AddAtom( MAKEINTATOM( wValue ) ) ;

// Значение атома равно 100.

// Строка будет содержать число "#1000".

GetAtomName( aValue, azStoredString, 6 );

Целые атомы на самом деле вообще не добавляются и не удаляются из системы.

Напротив, они синтезируются функциями управления атомами. В приведенном примере тот же самый результат может быть сохранен в строке szStoredString, если функция DeleteAtom() вообще не вызывается, при этом вместо значения wValue подставляется значение a Value.

Таким образом, функция DeleteAtom() может быть безболезненно вызвана и по отношению к целым атомам. А поскольку они вообще не существуют, они и не могут быть удалены, хотя функция DeleteAtom() так или иначе возвращает 0, что указывает на успешное завершение.


Информация о работе «Атомы»
Раздел: Информатика, программирование
Количество знаков с пробелами: 11350
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
63835
1
1

... массой, большей урана. В наши дни такие «трансурановые» элементы были получены искусственно. Вполне можно утверждать, что предела таблицы не существует и получение или нахождение других трансурановых элементов – это дело будущего. Таково, в общих чертах, учение об атомах химических элементов, созданное Дальтоном и определившее все даль­нейшее развитие химии в XIX столетии. , с помощью ...

Скачать
36708
9
4

... орбиты; 3.   Магнитным квантовым числом, характеризующим положение облаков в пространстве; 4.   И спиновым квантовым числом, характеризующим веретенообразное движение электрона вокруг своей оси. [ 1, 4 ] Глава II. Строение атома Химики XIXв. Не в состоянии были ответить на вопрос, в чем суть различий между атомами разных элементов, например меди и йода. Лишь в период 1897-1911гг. ...

Скачать
62270
12
10

... этому времени: открытие радиоактивности, экспериментальное доказательство ядерной модели ядра, измерение отношения e / m для электрона, α-частицы и для так называемой H-частицы – ядра атома водорода, открытие искусственной радиоактивности и ядерных реакций, измерение зарядов атомных ядер и т. д. В настоящее время твердо установлено, что атомные ядра различных элементов состоят из двух частиц ...

Скачать
10945
0
8

... атома относительно атомного ядра. Вторым фактором является межорбитальное отталкивание зарядов электронов. Отсюда видно, что электронная конфигурация атома не оболочковая, как принято считать, а орбитально ярусная. На рисунке 3 показаны проекции электронных оболочек некоторых атомов. С точки зрения квантовой механики все проекции равноценны и показывают структуру электронных облаков атомов. А ...

0 комментариев


Наверх