Что такое AsyncIO?
AsyncIO — это библиотека-помощник для сопрограмм на C++, основанная на функции сопрограммы llvm-5.0 или более поздней версии.
В AsyncIO v0.2 есть два компонента:
Как установить
Убедитесь, что у вас установлены llvm 5.0 или выше, libc++, libc++abi, libuv и cmake.
brew tap homebrew/versions
brew install --HEAD llvm #это установит libc++ по умолчанию
brew install cmake
brew install
sudo apt-get install libuv cmake
# установите llvm-5.0 libc++ libc++abi в /usr/local
# загрузите отсюда http://releases.llvm.org/download.html#5.0.0
cd $ASYNCIO_PATH && mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j 10
make test
make install
Примеры Есть несколько примеров в каталоге asyncio/examples. Для получения более подробной информации о конкретном классе вы можете проверить тесты в каталоге asyncio/tests или просто взглянуть на код.
Исходный код: sleep_sort.cpp
#include <asyncio/asyncio.hpp>
#include <iostream>
using namespace std;
using namespace asyncio;
coro<void> sleepCout(EventLoop *loop, uint64_t value) {
co_await sleep(loop, value);
cout << value << endl;
}
int main() {
EventLoop loop;
cout << "Someone says 'sleep sort' is O(1)?" << endl;
uint64_t max = -1;
for (auto &&v : {5, 1, 9, 7, 3}) {
loop.createTask(sleepCout(&loop, v))->release();
max = max > v ? max : v;
}
loop.callLater(max + 20, [&] { loop.stop(); })->release();
loop.runForever();
cout << "... I think it makes sense! 🤣🤣🤣" << endl;
}
Скомпилируйте его:
$ clang -I $ASYNCIO_HEADER_PATH -o sleep_sort -lc++ -std=c++14 -stdlib=libc++ -fcoroutines-ts -lasyncio -L $ASYNCIO_LIB_PATH -rpath $ASYNCIO_LIB_PATH sleep_sort.cpp
$ ./sleep_sort
Someone says 'sleep sort' is O(1)?
1
3
5
7
9
... I think it makes sense! 🤣🤣🤣
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )