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, что указывает на успешное завершение.
... массой, большей урана. В наши дни такие «трансурановые» элементы были получены искусственно. Вполне можно утверждать, что предела таблицы не существует и получение или нахождение других трансурановых элементов – это дело будущего. Таково, в общих чертах, учение об атомах химических элементов, созданное Дальтоном и определившее все дальнейшее развитие химии в XIX столетии. , с помощью ...
... орбиты; 3. Магнитным квантовым числом, характеризующим положение облаков в пространстве; 4. И спиновым квантовым числом, характеризующим веретенообразное движение электрона вокруг своей оси. [ 1, 4 ] Глава II. Строение атома Химики XIXв. Не в состоянии были ответить на вопрос, в чем суть различий между атомами разных элементов, например меди и йода. Лишь в период 1897-1911гг. ...
... этому времени: открытие радиоактивности, экспериментальное доказательство ядерной модели ядра, измерение отношения e / m для электрона, α-частицы и для так называемой H-частицы – ядра атома водорода, открытие искусственной радиоактивности и ядерных реакций, измерение зарядов атомных ядер и т. д. В настоящее время твердо установлено, что атомные ядра различных элементов состоят из двух частиц ...
... атома относительно атомного ядра. Вторым фактором является межорбитальное отталкивание зарядов электронов. Отсюда видно, что электронная конфигурация атома не оболочковая, как принято считать, а орбитально ярусная. На рисунке 3 показаны проекции электронных оболочек некоторых атомов. С точки зрения квантовой механики все проекции равноценны и показывают структуру электронных облаков атомов. А ...
0 комментариев