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 и т.д. Динамичность библиотеки в данном случае бессмысленна.