Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. LibIPC -- библиотека межпотокового взаимодействия
  2. =================================================
  3.  
  4.  
  5. Интерфейс
  6. ---------
  7.  
  8. **LibIPC** будет предоставлять следующие функции:
  9.  
  10. int **IPCInit**\(void);
  11.   Инициализация IPC. При этом должна быть инициализирована куча для динамического
  12.   выделения памяти под буфер. Возвращает 0 = **SUCCESS** в случае удачи, в противном
  13.   случае код ошибки:
  14.  
  15.   - **NO_MEMORY** (=1) -- невозможно получить память
  16.   - **CANNOT_SET_MASK** (=2) -- невозможно установить маску событий
  17.   - *n* + 2 -- системная функция завершилась с ошибкой *n*
  18.  
  19. int **IPCSend**\(int *tid*, void *\*message*, int *length*);
  20.   Послать сообщение. Если произошла системная ошибка 2 или 3, будут произведены
  21.   дополнительные попытки (не больше какой-то константы). В случае успеха
  22.   возвращает 0, коды ошибок:
  23.  
  24.   - **IPC_NO_AREA** (=1) --  поток не определил область IPC
  25.   - **IPC_BUFFER_LOCKED** (=2) -- были ошибки 2 и 3, при последней попытке -- ошибка 2 (поток заблокировал буфер)
  26.   - **IPC_OVERFLOW** (=3) -- то же, что и 2, только последняя ошибка 3 (переполнение буфера)
  27.   - **IPC_NO_TID** (=4) -- единственная или последняя ошибка была 4, т.е. отсутствие потока с заданным TID
  28.  
  29. bool **IPCCheck**\(void);
  30.   Проверить, не пришло ли новое сообщение.
  31.  
  32. Message \*\ **IPCGetNextMessage**\(void);
  33.   Получить следующее сообщение. То же самое, что **IPCWaitMessage**\(0).
  34.  
  35. Message \*\ **IPCWaitMessage**\(int *time*);
  36.   Ждать сообщения не больше time миллисекунд (-1 = ждать вечно). При этом
  37.   сообщение удаляется из буфера и копируется в динамически выделяемую область
  38.   памяти. Если сообщения нет (или произошла ошибка выделения памяти),
  39.   возвращается **NULL**, если есть -- адрес на структуру Message::
  40.  
  41.     typedef struct Message {
  42.       int tid;
  43.       int length;
  44.       //void msg;
  45.     } Message;
  46.  
  47. void **IPCLock**\(void);
  48.   Функция ручной блокировки буфера (в большинстве случаев не нужна, т.к.
  49.   библиотека сама блокирует буфер в нужных случаях).
  50.  
  51. void **IPCUnclock**\(void);
  52.   Функция, обратная **IPCLock**\();
  53.  
  54.  
  55. Форма реализации
  56. ----------------
  57.  
  58. - Язык: **C**
  59. - Формат: .o -- поддержка C, asm и т.д. Динамичность библиотеки в данном случае бессмысленна.