Презентация «Операционные системы Межпроцессное взаимодействие»

Смотреть слайды в полном размере
Презентация «Операционные системы Межпроцессное взаимодействие»

Вы можете ознакомиться с презентацией онлайн, просмотреть текст и слайды к ней, а также, в случае, если она вам подходит - скачать файл для редактирования или печати. Документ содержит 93 слайда и доступен в формате ppt. Размер файла: 1.13 MB

Просмотреть и скачать

Pic.1
Операционные системы Межпроцессное взаимодействие
Операционные системы Межпроцессное взаимодействие
Pic.2
Виды межпроцессного взаимодействия (IPC) Предотвращение критических ситуаций Синхронизация процессов
Виды межпроцессного взаимодействия (IPC) Предотвращение критических ситуаций Синхронизация процессов Передача информации от одного процесса другому
Pic.3
Межпроцессное взаимодействие Предотвращение критических ситуаций и средства синхронизации процессов
Межпроцессное взаимодействие Предотвращение критических ситуаций и средства синхронизации процессов
Pic.4
Возникновение гонок (состязаний) Два процесса хотят получить доступ к общей памяти в одно и тоже вре
Возникновение гонок (состязаний) Два процесса хотят получить доступ к общей памяти в одно и тоже время.
Pic.5
Возникновение гонок (состязаний) Если процессу требуется вывести на печать файл, он помещает имя фай
Возникновение гонок (состязаний) Если процессу требуется вывести на печать файл, он помещает имя файла в специальный каталог спулера. Другой процесс, “демон печати”, периодически проверяет наличие …
Pic.6
Возникновение гонок (состязаний) Возможна следующая ситуация: Процесс A считывает значение (7) перем
Возникновение гонок (состязаний) Возможна следующая ситуация: Процесс A считывает значение (7) переменной in и сохраняет его в локальной переменной next_free_slot. После этого происходит прерывание …
Pic.7
Критические секции Важным понятием синхронизации потоков для решения проблемы состязаний является по
Критические секции Важным понятием синхронизации потоков для решения проблемы состязаний является понятие «критической секции» программы. Критическая секция – это часть программы, результат …
Pic.8
Критические секции Во всех потоках, работающих с критическими данными, должна быть определена критич
Критические секции Во всех потоках, работающих с критическими данными, должна быть определена критическая секция. В разных потоках критическая секция состоит в общем случае из разных …
Pic.9
Условия исключения гонок Два процесса не должны одновременно находиться в критической секции В прогр
Условия исключения гонок Два процесса не должны одновременно находиться в критической секции В программе не должно быть предположений о скорости или количестве процессоров Процесс вне критической …
Pic.10
Взаимное исключение с использованием критических секций
Взаимное исключение с использованием критических секций
Pic.11
Семафоры Дийкстра (Dijkstra) предложил использовать переменные, которые могут принимать целые неотри
Семафоры Дийкстра (Dijkstra) предложил использовать переменные, которые могут принимать целые неотрицательные значения. Такие переменные, используемые для синхронизации вычислительных процессов, …
Pic.12
Иллюстрация работы семафора
Иллюстрация работы семафора
Pic.13
Задача о читателях и писателях Рассмотрим использование семафоров на классическом примере взаимодейс
Задача о читателях и писателях Рассмотрим использование семафоров на классическом примере взаимодействия двух выполняющихся в режиме мультипрограммирования потоков, один из которых пишет данные в …
Pic.14
Задача о читателях и писателях
Задача о читателях и писателях
Pic.15
Задача о читателях и писателях Таким образом, семафоры позволяют эффективно решать задачу синхрониза
Задача о читателях и писателях Таким образом, семафоры позволяют эффективно решать задачу синхронизации Доступа к ресурсным пулам, таким, например, как набор идентичных в функциональном назначении …
Pic.16
Мьютексы Иногда используется упрощенная версия семафора – мьютекс (mutex, mutual exclusion – взаимно
Мьютексы Иногда используется упрощенная версия семафора – мьютекс (mutex, mutual exclusion – взаимное исключение). Иногда называют еще двоичным семафором. Мьютекс – переменная, которая может …
Pic.17
Использование мьютекса
Использование мьютекса
Pic.18
Атомарные операции В достаточно частых случаях необходимо обеспечить конкурентный доступ к какой-либ
Атомарные операции В достаточно частых случаях необходимо обеспечить конкурентный доступ к какой-либо целочисленной переменной, являющейся счетчиком. Тогда бывает достаточно просто обеспечить …
Pic.19
Атомарные операции в Windows 2000-2003 ОС Windows предоставляет функции для увеличения (InterlockedI
Атомарные операции в Windows 2000-2003 ОС Windows предоставляет функции для увеличения (InterlockedIncrement, InterlockedIncrement64) или уменьшения (InterlockedDecrement, InterlockedDecrement64) …
Pic.20
Атомарные операции в Windows 2000-2003 Пример использования атомарной операции: static DWORD array [
Атомарные операции в Windows 2000-2003 Пример использования атомарной операции: static DWORD array [100]; … for (int i = 0; i < 100; i++) InterlockedIncrement(array+i);
Pic.21
Мониторы Для упрощения написания программ в 1974 г. Хоар (Hoare) и Бринч (Brinch Hansen) предложили
Мониторы Для упрощения написания программ в 1974 г. Хоар (Hoare) и Бринч (Brinch Hansen) предложили примитив синхронизации более высокого уровня – монитор. Монитор – примитив синхронизации более …
Pic.22
Решение задачи читателей и писателей с помощью монитора
Решение задачи читателей и писателей с помощью монитора
Pic.23
Критические секции В составе API ОС Windows имеются специальные и эффективные функции для организаци
Критические секции В составе API ОС Windows имеются специальные и эффективные функции для организации входа в критическую секцию и выхода из нее потоков одного процесса в режиме пользователя. Они …
Pic.24
Критические секции Примерная схема программы может выглядеть следующим образом. CRITICAL_SECTION cs;
Критические секции Примерная схема программы может выглядеть следующим образом. CRITICAL_SECTION cs; DWORD WINAPI SecondThread() { InitializeCriticalSection(&cs); EnterCriticalSection(&cs); …
Pic.25
Критические секции Функции EnterCriticalSection и LeaveCriticalSection реализованы на основе атомарн
Критические секции Функции EnterCriticalSection и LeaveCriticalSection реализованы на основе атомарных Interlocked-функций. Существенным является то, что в случае невозможности входа в критический …
Pic.26
Межпроцессное взаимодействие Синхронизация потоков с использованием объектов ядра Windows 2000
Межпроцессное взаимодействие Синхронизация потоков с использованием объектов ядра Windows 2000
Pic.27
Синхронизация потоков Простейшей формой связи потоков является синхронизация (synchronization). Синх
Синхронизация потоков Простейшей формой связи потоков является синхронизация (synchronization). Синхронизация означает способность потока добровольно приостанавливать свое исполнение и ожидать, пока …
Pic.28
Синхронизационные объекты и их состояния процессы потоки задания файлы консольный ввод
Синхронизационные объекты и их состояния процессы потоки задания файлы консольный ввод
Pic.29
Объекты синхронизации и их состояния Средства ожидания и сообщения реализованы в ядре Windows как ча
Объекты синхронизации и их состояния Средства ожидания и сообщения реализованы в ядре Windows как часть объектной архитектуры. Синхронизационные объекты (synchronization objects) – это объекты ядра, …
Pic.30
Спящие потоки
Спящие потоки
Pic.31
Функции ожидания DWORD WaitForSingleObject( HANDLE hObject, DWORD dwMilliseconds );
Функции ожидания DWORD WaitForSingleObject( HANDLE hObject, DWORD dwMilliseconds );
Pic.32
Функции ожидания Wait-функции позволяют потоку в любой момент приостановиться и ждать освобождения к
Функции ожидания Wait-функции позволяют потоку в любой момент приостановиться и ждать освобождения какого-либо объекта ядра. Когда поток вызывает эту функцию, первый параметр, hObject, идентифицирует …
Pic.33
Объекты синхронизации События Ожидающий таймер Семафор Мьютекс
Объекты синхронизации События Ожидающий таймер Семафор Мьютекс
Pic.34
События События – самая примитивная разновидность объектов ядра. События содержат счетчик числа поль
События События – самая примитивная разновидность объектов ядра. События содержат счетчик числа пользователей (как и все объекты ядра) и две булевы переменные: одна сообщает тип данного …
Pic.35
Иллюстрация работы “события”
Иллюстрация работы “события”
Pic.36
Создание события HANDLE CreateEvent( LPSECURITY_ATTRIBUTES psa, BOOL fManualReset, BOOL fInitialStat
Создание события HANDLE CreateEvent( LPSECURITY_ATTRIBUTES psa, BOOL fManualReset, BOOL fInitialState, LPCTSTR pszName); HANDLE OpenEvent( DWORD fdwAccess, BOOL fInhent, LPCTSTR pszName);
Pic.37
Создание события Объект ядра “событие" создается функцией CreateEvent. Параметр fManualReset (б
Создание события Объект ядра “событие" создается функцией CreateEvent. Параметр fManualReset (булева переменная) сообщает системе, хотите Вы создать событие со сбросом вручную (TRUE) или с …
Pic.38
Управление событием Перевод события в свободное состояние: BOOL SetEvent (HANDLE hEvenеt); Перевод с
Управление событием Перевод события в свободное состояние: BOOL SetEvent (HANDLE hEvenеt); Перевод события в занятое состояние: BOOL ResetEvent (HANDLE hEvent); Освобождение события и перевод его …
Pic.39
Особенности PulseEvent Функция PulseEvent устанавливает событие и тут же переводит его обратно в сбр
Особенности PulseEvent Функция PulseEvent устанавливает событие и тут же переводит его обратно в сброшенное состояние. Ее вызов равнозначен последовательному вызову SetEvent и ResetEvent. Если …
Pic.40
Ожидающие таймеры Ожидающие таймеры (waitable timers) – это объекты ядра, которые самостоятельно пер
Ожидающие таймеры Ожидающие таймеры (waitable timers) – это объекты ядра, которые самостоятельно переходят в свободное состояние в определенное время или через регулярные промежутки времени.
Pic.41
Создание ожидающего таймера HANDLE CreateWaitableTimer( LPSECURITY_ATTRIBUTES psa, BOOL fManualReset
Создание ожидающего таймера HANDLE CreateWaitableTimer( LPSECURITY_ATTRIBUTES psa, BOOL fManualReset, LPCTSTR pszName); HANDLE OpenWaitableTimer( DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR …
Pic.42
Управление ожидающим таймером BOOL SetWaitableTimer( HANDLE hTimer, const LARGE_INTEGER *pDueTime, L
Управление ожидающим таймером BOOL SetWaitableTimer( HANDLE hTimer, const LARGE_INTEGER *pDueTime, LONG lPeriod, LPTIMERAPCROUTINE pfnCompletionRoutine, LPVOID pvArgToCompletionRoutine, BOOI …
Pic.43
Управление ожидаемым таймером Эта функция принимает несколько параметров, в которых легко запутаться
Управление ожидаемым таймером Эта функция принимает несколько параметров, в которых легко запутаться. Очевидно, что hTimer определяет нужный таймер. Следующие два параметра (pDuеТimе и lPeriod) …
Pic.44
Создание семафора HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTE psa, LONG lInitialCount, LONG lMaximu
Создание семафора HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTE psa, LONG lInitialCount, LONG lMaximumCount, LPCTRTR pszName); HANDLE OpenSemaphore( DWORD fdwAccess, BOOL bInheritHandle, LPCTSTR …
Pic.45
Управление семафором Поток получает доступ к ресурсу, вызывая одну из Wait-функций и передавая ей оп
Управление семафором Поток получает доступ к ресурсу, вызывая одну из Wait-функций и передавая ей описатель семафора, который охраняет этот ресурс Wait-функция проверяет у семафора счетчик текущего …
Pic.46
Управление семафором Если Wait-функция определяет, что счетчик текущего числа ресурсов равен 0 (сема
Управление семафором Если Wait-функция определяет, что счетчик текущего числа ресурсов равен 0 (семафор занят), система переводит вызывающий поток в состояние ожидания Когда другой поток увеличит …
Pic.47
Создание мьютекса HANDLE CreateMutex( LPSECURITY_ATTRIBUTES psa, BOOL fInitialOwner, LPCTSTR pszName
Создание мьютекса HANDLE CreateMutex( LPSECURITY_ATTRIBUTES psa, BOOL fInitialOwner, LPCTSTR pszName); HANDLE OpenMutex( DWORD fdwAccess, BOOL fInheritHandle, LPCTSTR pszName); Параметр fInitialOwner …
Pic.48
Управление мьютексом Поток получает доступ к разделяемому ресурсу, вызывая одну из Wait-функций и пе
Управление мьютексом Поток получает доступ к разделяемому ресурсу, вызывая одну из Wait-функций и передавая ей описатель мьютекса, который охраняет этот ресурс. Wait-функция проверяет у мьютекса …
Pic.49
Межпроцессное взаимодействие Передача информации
Межпроцессное взаимодействие Передача информации
Pic.50
Взаимодействие между процессами (IPC) DDE (Dynamic Data Exchange), OLE, atom (атомы) pipes (анонимны
Взаимодействие между процессами (IPC) DDE (Dynamic Data Exchange), OLE, atom (атомы) pipes (анонимные каналы), named pipes (именованные каналы) почтовые ящики (mailslots) RPC сокеты файлы, …
Pic.51
Взаимодействие между процессами (IPC)
Взаимодействие между процессами (IPC)
Pic.52
Атомы Атомы - это очень простой и доступный путь IPC. Идея состоит в том, что процесс может поместит
Атомы Атомы - это очень простой и доступный путь IPC. Идея состоит в том, что процесс может поместить строку в таблицу атомов и эта строка будет видна другим процессам. Когда процесс помещает строку …
Pic.53
Атомы GlobalAddAtom GlobalGetAtomName GlobalFindAtom GlobalDeleteAtom
Атомы GlobalAddAtom GlobalGetAtomName GlobalFindAtom GlobalDeleteAtom
Pic.54
Сообщение WM_COPYDATA Отправитель: COPYDATASTRUCT cds; cds. cbData = (DWORD) nSize; cds. lpData = (P
Сообщение WM_COPYDATA Отправитель: COPYDATASTRUCT cds; cds. cbData = (DWORD) nSize; cds. lpData = (PVOID) pBuffer; SendMessage (hWndTarget, WM_COPYDATA, (WPARAM) hWnd, (LPARAM) &cds); Получатель: …
Pic.55
Сообщение WM_COPYDATA Сообщение WM_COPYDATA позволяет приложениям копировать данные между их адресны
Сообщение WM_COPYDATA Сообщение WM_COPYDATA позволяет приложениям копировать данные между их адресными пространствами. При этом приложения не обязательно должны быть 32-разрядными — для 16-разрядных …
Pic.56
Анонимные каналы Анонимные каналы не имеют имен. Не пригодны для обмена через сеть. Главная цель – с
Анонимные каналы Анонимные каналы не имеют имен. Не пригодны для обмена через сеть. Главная цель – служить каналом между родительским и дочерним процессом или между дочерними процессами. …
Pic.57
Каналы
Каналы
Pic.58
Использование анонимных каналов Главная цель – служить каналом между родительским и дочерним процесс
Использование анонимных каналов Главная цель – служить каналом между родительским и дочерним процессом или между дочерними процессами. Родительский пpоцесс может быть консольным или GUI-пpиложение, …
Pic.59
Создание анонимных каналов BOOL CreatePipe( LPHANDLE hReadPipe, LPHANDLE hWritePipe, LPSECURITY_ATTR
Создание анонимных каналов BOOL CreatePipe( LPHANDLE hReadPipe, LPHANDLE hWritePipe, LPSECURITY_ATTRIBUTES lpPipeAttributes, DWORD nSize ); ReadFile – чтение из канала WriteFile – запись в канал
Pic.60
Создание анонимных каналов pReadHandle - это указатель на переменную типа dword, которая получит дес
Создание анонимных каналов pReadHandle - это указатель на переменную типа dword, которая получит дескриптов конца чтения канала. pWriteHandle - это указатель на переменную типа dword, которая …
Pic.61
Передача дескрипторов Установить паpаметp bInheritable стpуктуpы SECURITY_ATTRIBUTES в TRUE, чтобы д
Передача дескрипторов Установить паpаметp bInheritable стpуктуpы SECURITY_ATTRIBUTES в TRUE, чтобы дескрипторы могли наследоваться. Вызов функции CreateProcess с параметром blnheritHandles = TRUE …
Pic.62
Дубликаты дескрипторов BOOL DuplicateHandle( HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HAND
Дубликаты дескрипторов BOOL DuplicateHandle( HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE lpTargetHandle, DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD …
Pic.63
Дубликаты дескрипторов Первый и третий параметры функции DuplicateHandle представляют собой описател
Дубликаты дескрипторов Первый и третий параметры функции DuplicateHandle представляют собой описатели объектов ядра, специфичные для вызывающего процесса Кроме того, эти параметры должны …
Pic.64
Пример использования анонимного канала Создаем анонимный канал с помощью CreatePipe. Теперь мы должн
Пример использования анонимного канала Создаем анонимный канал с помощью CreatePipe. Теперь мы должны подготовить параметры, которые передадим CreateProcess (мы используем эту функцию для загрузки …
Pic.65
NPFS (Named Pipe File System) Named Pipe File System является виртуальной файловой системой, которая
NPFS (Named Pipe File System) Named Pipe File System является виртуальной файловой системой, которая управляет каналами named pipes. Каналы named pipes относятся к классу файловых объектов (API …
Pic.66
Работа с именованными каналами Серверный процесс создает канал на локальном компьютере с помощью фун
Работа с именованными каналами Серверный процесс создает канал на локальном компьютере с помощью функции программного интерфейса Win32 "CreateNamedPipe". Серверный процесс активизирует …
Pic.67
Создание именованного канала HANDLE CreateNamedPipe ( LPCTSTR lpName, DWORD dwOpenMode, DWORD dwPipe
Создание именованного канала HANDLE CreateNamedPipe ( LPCTSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode, DWORD nMaxInstances, DWORD nOutBufferSize, DWORD nInBufferSize, DWORD nDefaultTimeOut, …
Pic.68
Параметры создания канала lpName – имя именованного канала; dwOpenMode – определяет направление пере
Параметры создания канала lpName – имя именованного канала; dwOpenMode – определяет направление передачи, возможные варианты - PIPE_ACCESS_DUPLEX, PIPE_ACCESS_INBOUND, PIPE_ACCESS_OUTBOUND ; …
Pic.69
Подключение к именованному каналу BOOL ConnectNamedPipe ( HANDLE hNamedPipe, LPOVERLAPPED lpOverlapp
Подключение к именованному каналу BOOL ConnectNamedPipe ( HANDLE hNamedPipe, LPOVERLAPPED lpOverlapped ); BOOL DisconnectNamedPipe ( HANDLE hNamedPipe );
Pic.70
Подключение к именованному каналу После того как канал создан, сервер подключается к нему с помощью
Подключение к именованному каналу После того как канал создан, сервер подключается к нему с помощью функции ConnectNamedPipe () и начинает ожидать подключения клиента. Необходимо отметить, что …
Pic.71
Обмен данными по именованному каналу BOOL ReadFile/WriteFile ( HANDLE hFile, LPVOID lpBuffer, DWORD
Обмен данными по именованному каналу BOOL ReadFile/WriteFile ( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped );
Pic.72
Работа с каналом и ее завершение После установления виртуального соединение серверный процесс и клие
Работа с каналом и ее завершение После установления виртуального соединение серверный процесс и клиентский процесс могут обмениваться информацией при помощи пар функций "ReadFile" и …
Pic.73
Пример клиент-серверного приложения (сервер) HANDLE hPipe = CreateNamedPipe("\\. \pipe\Pipe
Пример клиент-серверного приложения (сервер) HANDLE hPipe = CreateNamedPipe("\\. \pipe\PipeSrv",PIPE_ACCESS_DUPLEX | WRITE_DAC, PIPE_TYPE_BYTE,1,100,100,100,NULL); if …
Pic.74
Пример клиент-серверного приложения (клиент) Работа с именованным каналом на клиентской стороне еще
Пример клиент-серверного приложения (клиент) Работа с именованным каналом на клиентской стороне еще проще чем на серверной. Для чтения и записи информации используются уже знакомые нам функции …
Pic.75
Пример клиент-серверного приложения (клиент) … char szName [] = “\ServerName\pipe\PipеSrv”; HANDLE
Пример клиент-серверного приложения (клиент) … char szName [] = “\ServerName\pipe\PipеSrv”; HANDLE hFile = CreateFile(szName,GENERIC_READ | GENERIC_WRITE, 0,NULL,OPEN_EXISTING,0,NULL); if …
Pic.76
Почтовые ящики (MailSlots) Mailslot является одним из механизмов, предназначенных для осуществления
Почтовые ящики (MailSlots) Mailslot является одним из механизмов, предназначенных для осуществления обмена данными между процессами (IPC). При этом процессы могут быть запущены как на одной ПЭВМ …
Pic.77
Почтовые ящики (MailSlots) Mailslot представляет собой псевдофайл, хранящийся в памяти. Для доступа
Почтовые ящики (MailSlots) Mailslot представляет собой псевдофайл, хранящийся в памяти. Для доступа к данным, содержащимся в этом псевдофайле, используются стандартные файловые функции Win32. Объект …
Pic.78
Формат имени сервера При создании объекта Mailslot сервером, имя объекта должно иметь следующий форм
Формат имени сервера При создании объекта Mailslot сервером, имя объекта должно иметь следующий формат: \. \mailslot\[path]name Имя объекта Mailslot должно содержать две наклонные черты влево, …
Pic.79
Форматы имени клиента Для того чтобы записать сообщение в Mailslot, клиент обращается к нему по имен
Форматы имени клиента Для того чтобы записать сообщение в Mailslot, клиент обращается к нему по имени. При этом если клиент и сервер запушены на одной ПЭВМ, то формат имени, используемый клиентом, …
Pic.80
Клиенты, сервера и имена MailSlot cервер – является процессом, который создает и, обладает MailSlot.
Клиенты, сервера и имена MailSlot cервер – является процессом, который создает и, обладает MailSlot. Когда сервер создает MailSlot, он получает указатель. Этот указатель должен использоваться, когда …
Pic.81
Создание почтового ящика на сервере HANDLE CreateMailslot ( // имя ящика LPCTSTR lpName, // максимал
Создание почтового ящика на сервере HANDLE CreateMailslot ( // имя ящика LPCTSTR lpName, // максимальный размер сообщения DWORD nMaxMessageSize, // интервал-тайм аута чтения DWORD lReadTimeout, // …
Pic.82
Формат имения ящика Для открытия ящика, созданного на другом компьютере в сети, необходимо указать и
Формат имения ящика Для открытия ящика, созданного на другом компьютере в сети, необходимо указать имя в формате \ИмяКомпьютера\mailslot\[Путь] ИмяЯщика Можно открыть доменный ящик для передачи …
Pic.83
Пример создания сервера HANDLE hSlot = NULL; hSlot = CreateMailslot ("\\computername\mailslo
Пример создания сервера HANDLE hSlot = NULL; hSlot = CreateMailslot ("\\computername\mailslot\messngr", 0, MAILSLOT_WAIT_FOREVER, NULL); if (hSlot != INVALID_HANDLE_VALUE) { char …
Pic.84
Создание клиента почтового ящика HANDLE hSlot = CreateFile(("\\computername\mailslot\messng
Создание клиента почтового ящика HANDLE hSlot = CreateFile(("\\computername\mailslot\messngr", GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if …
Pic.85
Использование mailslot В MSDN написано, что если клиент открывает слот прежде чем слот был создан се
Использование mailslot В MSDN написано, что если клиент открывает слот прежде чем слот был создан сервером, то он получит INVALID_HANDLE_VALUE
Pic.86
Использование mailslot Использование мэйлслотов особенно удобно в системах такого pода, pаботающих в
Использование mailslot Использование мэйлслотов особенно удобно в системах такого pода, pаботающих в пpеделах локальной сети. Пpогpамма-сеpвеp создает на своем компьютере мэйлслот с именем, известным …
Pic.87
Получение информации о почтовом ящике BOOL GetMailslotInfo ( HANDLE hMailslot, // указатель на слот
Получение информации о почтовом ящике BOOL GetMailslotInfo ( HANDLE hMailslot, // указатель на слот LPDWORD lpMaxMessageSize, // максимальный размер LPDWORD lpNextSize, // размер следующего LPDWORD …
Pic.88
Изменение настроек почтового ящика BOOL SetMailslotInfo( HANDLE hMailslot, DWORD lReadTimeout );
Изменение настроек почтового ящика BOOL SetMailslotInfo( HANDLE hMailslot, DWORD lReadTimeout );
Pic.89
Динамически компонуемые библиотеки (DLL) Если два приложения используют одну библиотеку, то они разд
Динамически компонуемые библиотеки (DLL) Если два приложения используют одну библиотеку, то они разделяют все глобальные переменные этой библиотеки. В действительности, глобальные переменные, как и …
Pic.90
Раздел с общими данными в DLL #pragma data_seg(". shared") //Общие данные #pragma data_seg
Раздел с общими данными в DLL #pragma data_seg(". shared") //Общие данные #pragma data_seg() UsersDll. def: LIBRARY "UsersDll" SECTIONS . shared READ WRITE SHARED
Pic.91
Удаленный вызов процедур (RPC - Remote Procedure Call) RPC (Remote Procedure Call) – это API, позвол
Удаленный вызов процедур (RPC - Remote Procedure Call) RPC (Remote Procedure Call) – это API, позволяющий приложению удаленно вызывать функции в других процессах как на своем, так и на удаленном …
Pic.92
Сокеты (программные гнезда)
Сокеты (программные гнезда)
Pic.93
Сокеты (программные гнезда) Взаимодействие процессов на основе программных гнезд основано на модели
Сокеты (программные гнезда) Взаимодействие процессов на основе программных гнезд основано на модели "клиент-сервер". Процесс-сервер "слушает (listens)" свое программное гнездо, …


Скачать презентацию

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