Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364139
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62791)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21319)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21692)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8692)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3462)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20644)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Контрольная работа: Атомы

Название: Атомы
Раздел: Рефераты по информатике, программированию
Тип: контрольная работа Добавлен 08:33:46 04 октября 2010 Похожие работы
Просмотров: 63 Комментариев: 22 Оценило: 3 человек Средний балл: 5 Оценка: неизвестно     Скачать

АТОМЫ


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

Другое дело — обмен данными потоков, выполняющихся в рамках разных процессов.

Для защиты процессов друг от друга ОС возводит мощные изолирующие преграды, которые не только защищают процессы, но и не позволяют им передавать друг другу данные.

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

При возникновении необходимости в обмене данными поток обращается с запросом к ОС. По этому запросу ОС, пользуясь своими привилегиями, создает различные системные средства связи, такие, например, как каналы или очереди сообщений.

Эти средства, так же как и рассмотренные выше средства синхронизации процессов, относятся к классу средств межпроцессного взаимодействия, то есть IPC (InterProcessCommunications).

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

Таким образом, IPC становится необходим в том случае, если поток одного процесса должен передать данные потоку другого процесса.

Интерфейс Win32 API предоставляет приложениям возможность хранения строк в структурах, известных под названием таблиц атомов.

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

Aтом (atom) представляет собой уникальное 16-разрядное значение, которое связано со строковой константой.

Использование атома в качестве ссылки на строку сродни применению дескриптора памяти для обращения к блоку общих глобальных данных.

Подобие имеющейся у приложения возможности передавать дескриптор памяти интерфейсу Win32 API с целью получения указателя на содержимое блока данных (с помощью функции GlobalLock()), приложение может также использовать средства Win32 API для получения значения строки, связанной с атомом.

Значение строки, которое представляет атом, известно под названием имени атома (atomname). Применение атомов:

1. Атомы применяются в приложениях ради экономии памяти. Сохранение неоднократно встречающихся строк в таблице атомов приложения позволяет экономить память, поскольку в данном случае значение строки сохраняется только один раз.

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

Еще одна причина хранения строк в виде атомов состоит в том, что таблицы атомов повышают общую производительность при сравнении строк, поскольку вместо сравнения каждого байта обеих строк в данном случае сравниваются лишь 16-разрядные атомы.

2. Кроме того, атомы имеют важное значение и для обмена данными между программами.

Таблица атомов, которая является глобальной для всех процессов, называется глобальной таблицей атомов (globalatomtable)и используется для обмена данными между процессами. Применение атомов для обмена данными между приложениями является одним из основополагающих принципов динамического обмена данными (DDE).

3. Атомы также широко используются для хранения строк переменной длины в дескрипторах объектов OLE (технологии встраивания и связывания объектов).

В результате применения атомов в дескрипторах данных OLE получаются более компактные структуры фиксированного размера с существенно более простым методом обмена.

Работа с таблицами атомов

Существует два вида таблиц атомов:

1. Локальные

2. Глобальные.

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

С другой стороны, доступ к атомам, хранящимся в глобальной таблице атомов, может выполняться из любого приложения. Что касается любого конкретного глобального атома, то по заданному имени атома интерфейс Win32 API вернет каждому приложению один и тот же атом.

Функция AddAtom() сохраняет строки в локальной таблице атомов. Имена атомов сохраняются в том же регистре, в котором они вводились.

Всякий раз когда функция AddAtom() вызывается для уже существующего атома, Windows увеличивает счетчик внутренних ссылок на этот атом.

Синтаксис функции AddAtom() следующий

ATOMAddAtom (LPCTSTRlpszStringToStore)

Параметры:

lpszStringToStore– указатель на сохраняемую строку, которая завершается нулевым символом. Максимальная длина строки составляет 255 символов. Если первым символом строки оказывается знак #, а после него следуют цифры, представляющие целое число, меньшее константы MAXINATOM, тогда возвращается целый атом.

Возвращаемое значение. При успешном выполнении – вновь созданный атом. Если указанная строка уже существует в таблице атомов, возвращается тот же самый атом, что и исходная строка; в противном случае – 0.

Для уменьшения счетчика ссылок на атом применяется функция DeteteAtom(). Когда число ссылок достигает нуля, атом из таблицы атомов удаляется. Синтаксис функции DeleteAtom() следующий

ATOMDeleteAtom (ATOMnAtom)

Параметры:

nAtom– атом, который удаляется из локальной таблице атомов. Целые атомы не могут быть удалены, хотя значение NULL возвращается всякий раз, когда они используются в качестве аргументов функции DeleteAtom().

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

Функция FindAtom() осуществляет поиск атома, который соответствует заданной строке, в локальной таблице атомов.

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

ATOMFindAtom (LPCTSTRlpszString)

Параметры:

lpszString– указатель на искомую строку, которая завершается нулевым символом. Если первым символом строки оказывается знак #, а после него следуют цифры, представляющие целое число, меньшее константы MAXINATOM, тогда возвращается синтезированный целочисленный атом с тем же значением.

Возвращаемое значение. При успешном выполнении – 16-разрядное значение локального атома, связанного с указанной строкой; в противном случае – NULL.

Для возврата имени атома из таблицы атомов применяется функция GetAtomName(). При этом имя атома возвращается в том же регистре, в котором оно первоначально сохранялось.

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

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

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

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

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

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

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

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

BOOLInitAtomTable (DWORDnSize)

Параметры:

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

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

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

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

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

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

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

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

Например.

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

LPCTSTRszAtom = "Anatom.";

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

{

switch( uMsg )

{

case WM_CREATE:

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

InitAtomTable( 73 );

break;

case WM_PAINT:

{

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

staticPAINTSTRUCTps;

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;

caseIDM_DELETE:

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

if ( FindAtom( szAtom ) )

DeleteAtom( FindAtom( szAtom ) );

InvalidateRect( hWnd, NULL, TRUE );

break;

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

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

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

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

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

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

charszStoredString[6];

WORD wValue = 1000;

ATOM aValue = AddAtom( MAKEINTATOM( wValue ) ) ;

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

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

GetAtomName( aValue, azStoredString, 6 );

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

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

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

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Хватит париться. На сайте FAST-REFERAT.RU вам сделают любой реферат, курсовую или дипломную. Сам пользуюсь, и вам советую!
Никита09:03:16 02 ноября 2021
.
.09:03:15 02 ноября 2021
.
.09:03:14 02 ноября 2021
.
.09:03:14 02 ноября 2021
.
.09:03:14 02 ноября 2021

Смотреть все комментарии (22)
Работы, похожие на Контрольная работа: Атомы

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

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



Результаты(288282)
Комментарии (4159)
Copyright © 2005-2021 HEKIMA.RU [email protected] реклама на сайте