mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-21 22:33:48 +03:00
59 lines
3.2 KiB
Plaintext
59 lines
3.2 KiB
Plaintext
|
LibIPC -- библиотека межпотокового взаимодействия
|
|||
|
=================================================
|
|||
|
|
|||
|
|
|||
|
Интерфейс
|
|||
|
---------
|
|||
|
|
|||
|
**LibIPC** будет предоставлять следующие функции:
|
|||
|
|
|||
|
int **IPCInit**\(void);
|
|||
|
Инициализация IPC. При этом должна быть инициализирована куча для динамического
|
|||
|
выделения памяти под буфер. Возвращает 0 = **SUCCESS** в случае удачи, в противном
|
|||
|
случае код ошибки:
|
|||
|
|
|||
|
- **NO_MEMORY** (=1) -- невозможно получить память
|
|||
|
- **CANNOT_SET_MASK** (=2) -- невозможно установить маску событий
|
|||
|
- *n* + 2 -- системная функция завершилась с ошибкой *n*
|
|||
|
|
|||
|
int **IPCSend**\(int *tid*, void *\*message*, int *length*);
|
|||
|
Послать сообщение. Если произошла системная ошибка 2 или 3, будут произведены
|
|||
|
дополнительные попытки (не больше какой-то константы). В случае успеха
|
|||
|
возвращает 0, коды ошибок:
|
|||
|
|
|||
|
- **IPC_NO_AREA** (=1) -- поток не определил область IPC
|
|||
|
- **IPC_BUFFER_LOCKED** (=2) -- были ошибки 2 и 3, при последней попытке -- ошибка 2 (поток заблокировал буфер)
|
|||
|
- **IPC_OVERFLOW** (=3) -- то же, что и 2, только последняя ошибка 3 (переполнение буфера)
|
|||
|
- **IPC_NO_TID** (=4) -- единственная или последняя ошибка была 4, т.е. отсутствие потока с заданным TID
|
|||
|
|
|||
|
bool **IPCCheck**\(void);
|
|||
|
Проверить, не пришло ли новое сообщение.
|
|||
|
|
|||
|
Message \*\ **IPCGetNextMessage**\(void);
|
|||
|
Получить следующее сообщение. То же самое, что **IPCWaitMessage**\(0).
|
|||
|
|
|||
|
Message \*\ **IPCWaitMessage**\(int *time*);
|
|||
|
Ждать сообщения не больше time миллисекунд (-1 = ждать вечно). При этом
|
|||
|
сообщение удаляется из буфера и копируется в динамически выделяемую область
|
|||
|
памяти. Если сообщения нет (или произошла ошибка выделения памяти),
|
|||
|
возвращается **NULL**, если есть -- адрес на структуру Message::
|
|||
|
|
|||
|
typedef struct Message {
|
|||
|
int tid;
|
|||
|
int length;
|
|||
|
//void msg;
|
|||
|
} Message;
|
|||
|
|
|||
|
void **IPCLock**\(void);
|
|||
|
Функция ручной блокировки буфера (в большинстве случаев не нужна, т.к.
|
|||
|
библиотека сама блокирует буфер в нужных случаях).
|
|||
|
|
|||
|
void **IPCUnclock**\(void);
|
|||
|
Функция, обратная **IPCLock**\();
|
|||
|
|
|||
|
|
|||
|
Форма реализации
|
|||
|
----------------
|
|||
|
|
|||
|
- Язык: **C**
|
|||
|
- Формат: .o -- поддержка C, asm и т.д. Динамичность библиотеки в данном случае бессмысленна.
|