1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/libstpool-libstpool

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 5.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 10:36 a4c0431

libstpool — это открытый, лёгкий, кроссплатформенный динамический пул потоков C/C++, библиотека пулов задач. Поддерживает Windows, Linux, Unix, ARM, MAC/OSX, NDK и предоставляет богатый набор функций.

Функции:

  • Кроссплатформенность (поддержка).
  • Приоритетные задачи (поддержка).
  • Динамический пул потоков (поддержка).
  • Статический пул потоков (поддержка).
  • Группировка задач и контроль изоляции групп (поддержка).
  • Контроль за увеличением или уменьшением количества пулов потоков в любое время (поддержка).
  • Управление перегрузкой задач (поддержка).

Компиляция и установка:

Linux/MAC:

  • ./configure.
  • make -j2 && make install.

Windows:

  • Откройте vs и откройте stpool_win_proj/stpool.sln.
  • Скомпилируйте проект msglog.
  • Скомпилируйте libstpool.
  • Наконец, скомпилируйте и запустите тестовый demo.

ARM: (предполагается, что используется кросс-компилятор arm-linux-gcc, а каталог установки библиотеки находится в текущем каталоге install_dir): *./configure --prefix=./install_dir --host=arm-linux-. *make -j2 && make install.

NDK:

  • Выполните ./configure для генерации конфигурации os/os_config.h.
  • Откройте os/os_config.h и закомментируйте свойства, которые не поддерживаются NDK, например: //#define HAS_PTHREAD_CONDATTR_SETCLOCK 1 //#define HAS_PTHREAD_ATTR_GETINHERITSCHED 1.
  • Запустите ndk-build, и сгенерированные библиотеки будут сохранены в obj.

Установка libstpoolc++ (простая оболочка C++ для libstpool):

  • Сначала скомпилируйте и установите libstpool, как описано выше.
  • Перейдите в каталог C++, выполните ./configure && make install, по умолчанию libstpoolc++ будет установлен в /usr/local.
  • Перейдите в examples-c++, скомпилируйте и запустите демонстрационный тест.

Библиотеки:

Заголовочные файлы:

  • msglog.h (заголовочный файл простого API журнала).
  • stpool_caps.h (файл определения набора возможностей).
  • stpool.h (базовый API-файл).
  • stpool_group.h (API-файл для группировки задач).
  • stpoolc++.h (обёрточный файл C++).

Файлы библиотек:

  • Библиотеки, созданные с помощью Makefile (обычно для систем, отличных от Windows):

    • libmsglog.a (сгенерированная статическая библиотека журнала).
    • libmsglog.so (динамическая библиотека журнала, созданная во время выполнения).
    • libstpool.a (статическая библиотека libstpool).
    • libstpool.so (созданная во время выполнения динамическая библиотека libstpool).
    • libstpoolc++.a (статическая библиотека libstpool C++).
    • libstpoolc++.so (динамическая библиотека libstpool C++, созданная во время выполнения).
  • Библиотеки, сгенерированные с помощью VS (для систем Windows):

    • libmsglog.lib (статическая библиотека журнала).
    • libstpool.lib (статическая библиотека libstpool).

Пример использования:

/** Определение ожидаемого набора возможностей */
eCAPs = eCAP_F_DYNAMIC|eCAP_F_ROUTINE|eCAP_F_TASK_WAIT_ALL;

/** Создание пула потоков */
pool = stpool_create("mypool", /** имя пула потоков                      */
                     eCAPs,    /** ожидаемые функции libstpool           */
                     5,	   /** максимальное количество потоков в пуле   */
                     0,	   /** количество предварительно запущенных потоков */
                     0,	   /** сохранение состояния пула после создания */
                     1		   /** число очередей приоритетов               */
                   );

/** Добавление 10 задач */
for (i=0; i<10; i++) {
    stpool_add_routine(pool, "mytask", task_run, task_err_handler, NULL, NULL);
}

/** Ожидание завершения всех задач */
stpool_wait_all(pool, -1);

/** Печать информации о состоянии пула */
puts( stpool_stat_print(pool) );

/** Освобождение пула потоков */
stpool_release(pool);

Обратная связь:

  • Электронная почта: piggy_xrh@163.com.
  • QQ: 1169732280.
  • Группа QQ: 535135194.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/libstpool-libstpool.git
git@api.gitlife.ru:oschina-mirror/libstpool-libstpool.git
oschina-mirror
libstpool-libstpool
libstpool-libstpool
master