Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 增强MSM+;ASIO与协同程序。一个简单的测试用例不起作用_C++_Boost Asio_Coroutine_Boost Msm - Fatal编程技术网

C++ 增强MSM+;ASIO与协同程序。一个简单的测试用例不起作用

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一次 //后端 #包括 //前端 #包括 //函子 #包括 #包括 //阿西奥 #包括 #包括 #包括 #包括 #包括 #包括

我正试图结合文档中的两个boost示例构建一个小示例。第一个示例来自MSM(状态机)库: 第二个是来自Asio的echo服务器(带有协同路由)示例: echo服务器示例在我的机器上正确运行

状态机有两个状态,
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::cout
void 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(); });
}