Как разработать C ++ API - PullRequest
       0

Как разработать C ++ API

1 голос
/ 06 октября 2010

Я довольно плохо знаком с продвинутыми техниками программ на C ++, такими как шаблоны, но я разрабатываю простой API для проекта, над которым я работаю.

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

Это выглядит примерно так.

Client
{
  int WriteFile();
  int ReadFile();
}

Но я хочу иметь здесь несколько вариантов.

  1. вызовите WriteFile и сделайте так, чтобы он блокировался.
  2. Вызовите WriteFileAsync и не блокируйте его.
  3. В асинхронной версии будьте гибки в том, как я знаю, что задача выполнена.
  4. Возможность опрашивать клиента, чтобы выяснить, где он находится, с моей текущей операцией чтения или записи.

Я немного растерялся относительно того, как проектироватьэто хорошо в C ++.Требуется избегать использования наддува, но я мог бы использовать подход, подобный наддува.Хотя я просмотрел некоторые заголовки и очень запутался.Что-то кроме базового программирования шаблонов для меня, я нахожу сбивающим с толку.

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

Ответы [ 2 ]

2 голосов
/ 06 октября 2010

Мой совет будет смотреть на документы и учебные пособия для boost :: asio (которые вы можете использовать как часть boost или как часть независимого asio проекта, но я полагаю, что требования нетвнешние библиотеки, а не просто повышение).

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

РЕДАКТИРОВАТЬ: ASIO имеет поддержку различных протоколов, поэтому может бытьболее сложный, чем нужно, прочитайте один из примеров и получите представление о том, как использовать механизмы обратного вызова.

1 голос
/ 06 октября 2010

Что касается использования асинхронных вызовов, я бы предложил прочитать о дизайне future для C ++ 0x.

По сути, идея состоит в том, чтобы передать прокси пользователю вместо простого типа. Этот прокси-сервер знает о потоке и может использоваться для:

  • опрос о завершении
  • получить результат

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

Новый многопоточный API C ++ 0x разработан очень умно (в основном после Boost.Threads) и даст вам много понимания того, как проектировать многопоточность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...