協程指南
從LeviLamina 1.0.0開始,協程替代了Scheduler。
用法
- 引用頭文件
C++
#include "ll/api/chrono/GameChrono.h" #include "ll/api/coro/CoroTask.h" - 在函數中調用
ll::coro::keepThis,傳入返回值為ll::coro::CoroTask的lambda函數 - 在
keepThis後調用launch或syncLaunch方法,後者會阻塞服務器線程,傳入Executor類,比如ll::thread::ServerThreadExecutor
可用的Executor
ll::thread::ServerThreadExecutor(ll/api/thread/ServerThreadExecutor.h): 服務器線程
ll::thread::ThreadPoolExecutor(ll/api/thread/ThreadPoolExecutor.h): 線程池
更多Executor請參見ll/api/thread/
示例
ServerThreadExecutor
以下函數使用協程實現了在服務器線程每20 tick輸出字符串到控制台1次,共計20次。
C++
#include "ll/api/chrono/GameChrono.h"
#include "ll/api/coro/CoroTask.h"
#include "ll/api/thread/ServerThreadExecutor.h"
void createServerThreadCoro() {
using namespace ll::chrono_literals;
ll::coro::keepThis([]() -> ll::coro::CoroTask<> {
for (int i = 0; i < 20; ++i) {
co_await 20_tick;
std::cout << "This is coro in server thread\n";
}
co_return;
}).launch(ll::thread::ServerThreadExecutor::getDefault());
}ThreadPoolExecutor
以下函數使用協程實現了在線程池中每秒輸出字符串到控制台1次,共計20次。
C++
#include "ll/api/chrono/GameChrono.h"
#include "ll/api/coro/CoroTask.h"
#include "ll/api/thread/ThreadPoolExecutor.h"
void createThreadPoolCoro() {
using namespace ll::chrono_literals;
ll::coro::keepThis([]() -> ll::coro::CoroTask<> {
for (int i = 0; i < 20; ++i) {
co_await 1s;
std::cout << "This is coro in thread pool\n";
}
co_return;
}).launch(ll::thread::ThreadPoolExecutor::getDefault());
}