Update README.md
This commit is contained in:
parent
7b74cc439a
commit
179a05210e
57
README.md
57
README.md
@ -5,3 +5,60 @@ cpputil
|
|||||||
* **ustring** - класс строки с внутренним представлением в UCS-4 и возможностью кодирования/декодирования UTF-8, UTF-16 и UTF-32 (little endian и big endian). Также распознает/вставляет BOM и экранированные USC-2 (\uXXXX) и USC-4 (\UXXXXXXXX) символы
|
* **ustring** - класс строки с внутренним представлением в UCS-4 и возможностью кодирования/декодирования UTF-8, UTF-16 и UTF-32 (little endian и big endian). Также распознает/вставляет BOM и экранированные USC-2 (\uXXXX) и USC-4 (\UXXXXXXXX) символы
|
||||||
* **logger** - класс логирования. Нацелен на максимальное быстродействие (непосредственно запись в лог происходит в отдельном потоке)
|
* **logger** - класс логирования. Нацелен на максимальное быстродействие (непосредственно запись в лог происходит в отдельном потоке)
|
||||||
* **threadpool** - простой пул потоков, позволяет удобно добавлять задачи в пул и получать результаты
|
* **threadpool** - простой пул потоков, позволяет удобно добавлять задачи в пул и получать результаты
|
||||||
|
|
||||||
|
## Примеры кода
|
||||||
|
|
||||||
|
#### threadpool
|
||||||
|
|
||||||
|
Создадим пул с 4 потоками
|
||||||
|
```C++
|
||||||
|
threadpool pool(4);
|
||||||
|
```
|
||||||
|
Добавим задачу в виде глобальной функции с параметрами
|
||||||
|
```C++
|
||||||
|
int add(int x, int y)
|
||||||
|
{
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
|
||||||
|
pool.add_task(&add, 1, 2);
|
||||||
|
```
|
||||||
|
или член класса
|
||||||
|
```cpp
|
||||||
|
class foo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void bar(std::string str)
|
||||||
|
{
|
||||||
|
std::cout << str << std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
foo f;
|
||||||
|
// тип параметров должен точно совпадать, т.е. нельзя напсать просто "hello world!"
|
||||||
|
// потому что это const char*, а не std::string
|
||||||
|
pool.add_task(&foo::bar, &f, std::string("hello world!"));
|
||||||
|
```
|
||||||
|
можно добавить стандартный функтор или лябду (в последнем случае потребуется явно указать тип возаращаемого значения)
|
||||||
|
```cpp
|
||||||
|
std::function<void()> func = []{ std::cout << "Hello world!" << std::endl; };
|
||||||
|
pool.add_task(func);
|
||||||
|
|
||||||
|
pool.add_task<int>([]{ return 42; });
|
||||||
|
```
|
||||||
|
Все варианты **add_task** возвращают **std::future**, что позволяет дождаться окончания выполнения задач и получить резульаты (а заодно гарантирует проброс исключений изнутри задач)
|
||||||
|
```cpp
|
||||||
|
threadpool pool(4);
|
||||||
|
std::vector<std::future<int>> vec;
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < 100; ++i)
|
||||||
|
{
|
||||||
|
std::future<int> fut = pool.add_task<int>([i] { return i; });
|
||||||
|
vec.push_back(std::move(fut));
|
||||||
|
}
|
||||||
|
|
||||||
|
for(std::size_t i = 0; i < 100; ++i)
|
||||||
|
{
|
||||||
|
std::cout << "res[" << i << "] = " << vec[i].get() << std::endl;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user