C++ 增强MSM+;ASIO与协同程序。一个简单的测试用例不起作用
我正试图结合文档中的两个boost示例构建一个小示例。第一个示例来自MSM(状态机)库: 第二个是来自Asio的echo服务器(带有协同路由)示例: echo服务器示例在我的机器上正确运行 状态机有两个状态,C++ 增强MSM+;ASIO与协同程序。一个简单的测试用例不起作用,c++,boost-asio,coroutine,boost-msm,C++,Boost Asio,Coroutine,Boost Msm,我正试图结合文档中的两个boost示例构建一个小示例。第一个示例来自MSM(状态机)库: 第二个是来自Asio的echo服务器(带有协同路由)示例: echo服务器示例在我的机器上正确运行 状态机有两个状态,AsioInitState和RegisterServersState,在转换表上只有一个匿名转换 以下是我的源代码: EchoServerMSM.h #pragma一次 //后端 #包括 //前端 #包括 //函子 #包括 #包括 //阿西奥 #包括 #包括 #包括 #包括 #包括 #包括
AsioInitState
和RegisterServersState
,在转换表上只有一个匿名转换
以下是我的源代码:
EchoServerMSM.h
#pragma一次
//后端
#包括
//前端
#包括
//函子
#包括
#包括
//阿西奥
#包括
#包括
#包括
#包括
#包括
#包括
名称空间msm=boost::msm;
名称空间mpl=boost::mpl;
使用名称空间boost::msm::front;
使用boost::asio::ip::tcp;
使用boost::asio::waitiable;
使用boost::asio::co_spawn;
使用boost::asio::detached;
使用boost::asio::use_waitiable;
名称空间this\u coro=boost::asio::this\u coro;
结构EchoServerSMFE:public msm::front::state\u machine\u def
{
//FSM国家名单
结构AsioInitState:public msm::front::state
{
模板
输入时无效(事件常量、FSM和FSM){
std::coutvoid on_条目(事件常量&/*未使用*/,FSM&/*未使用*/){
std::你能帮我们让复制变得活跃吗?我什么也做不到(msm的失败包括:)@sehe奇怪地选择c++17作为标准(我使用的那一个),它给出了应该用-fcoroutines修复的错误。如果你有一个这样的环境,我可以添加我在visualstudio或mac上使用的makefile(两者都工作)。我在Ubuntu上(虽然有点过时,但有GCC 10和协同程序支持。)。我目前两个示例都不使用名称空间(不好!),也没有警告,所以现在仔细研究如何集成这两个示例“使用*(fsm.io_context)切换也一样”-是的,基本上执行器是对执行上下文引用的抽象(这可能包括更多的元信息,比如一条线)。谢谢,它确实有效。
entering: AsioInitState
leaving: AsioInitState
entering: RegisterServersState
entering end: RegisterServersState
listener - 0
Hello CMake.
C:\Users\Andrea\source\repos\TGFLocalClient\out\build\x64-Debug (default)\TGFLocalClient\TGFLocalClient.exe (process 18280) exited with code 0.
To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
Press any key to close this window . . .
cmake_minimum_required (VERSION 3.8)
set(CMAKE_CXX_STANDARD 17)
# FOR MAC
# set(CMAKE_CXX_FLAGS "-fcoroutines-ts")
#FOR WIN
# set(CMAKE_CXX_FLAGS "/await /EHsc")
# Boost section
# set(Boost_DEBUG "ON")
set(Boost_LIB_PREFIX "lib")
set(BOOST_ROOT "C:/Users/YourFolder/boost_1_75_0")
set(BOOST_LIBRARIES "date_time" "regex")
find_package(Boost COMPONENTS ${BOOST_LIBRARIES})
message(STATUS "${BOOST_ROOT}")
message(STATUS "${BOOST_FOUND}")
message(STATUS "${Boost_INCLUDE_DIRS}")
message(STATUS "${Boost_LIBRARY_DIRS}")
message(STATUS "${BOOST_LIBRARIES}")
message("${Boost_regex_FOUND}")
message("${Boost_regex_LIBRARY}")
include_directories("${Boost_INCLUDE_DIRS}")
# Add source to this project's executable.
add_executable (TGFLocalClient "main.cpp" "EchoServerMSM.h")
target_link_libraries(TGFLocalClient Boost::date_time Boost::regex)
void on_entry(Event const & /*unused*/, FSM & /*unused*/) {
std::cout << "entering: AsioInitState" << std::endl;
// Signals Mask for ASIO
boost::asio::signal_set signals(*(fsm.io_context), SIGINT,
SIGTERM);
signals.async_wait([&](auto, auto) { fsm.io_context->stop(); });
}