Browse Source

尝试使用gcc10

tags/2.9.10
tearshark 4 years ago
parent
commit
dd233e33cc
3 changed files with 37 additions and 39 deletions
  1. 5
    5
      CMakeLists.txt
  2. 27
    27
      librf/src/config.h
  3. 5
    7
      tutorial/test_async_modern_cb.cpp

+ 5
- 5
CMakeLists.txt View File

cmake_minimum_required(VERSION 3.14)
PROJECT(librf)
cmake_minimum_required(VERSION 3.10)
project(librf)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "-std=c++2a -fcoroutines-ts -stdlib=libc++") set(CMAKE_CXX_FLAGS "-std=c++2a -fcoroutines-ts -stdlib=libc++")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
set(CMAKE_CXX_FLAGS "/std:c++latest /await /EHsc") set(CMAKE_CXX_FLAGS "/std:c++latest /await /EHsc")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
set(CMAKE_CXX_FLAGS "-std=c++2a -fcoroutines-ts")
set(CMAKE_CXX_FLAGS "-std=c++2a -fcoroutines")
endif() endif()
message(STATUS "C++ flags: ${CMAKE_CXX_FLAGS}") message(STATUS "C++ flags: ${CMAKE_CXX_FLAGS}")
) )
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
add_executable(test ${TSRC})
target_link_libraries(test ${LIB_NAME})
add_executable(rf_tutorial ${TSRC})
target_link_libraries(rf_tutorial ${LIB_NAME})

+ 27
- 27
librf/src/config.h View File

#pragma once
#ifndef RESUMEF_INLINE_STATE
#if defined(__clang__) || defined(_MSC_VER)
#define RESUMEF_INLINE_STATE 1
#else
#define RESUMEF_INLINE_STATE 1
#endif //defined(__clang__) || defined(_MSC_VER)
#endif //RESUMEF_INLINE_STATE
#ifndef RESUMEF_DEBUG_COUNTER
/* #undef RESUMEF_DEBUG_COUNTER */
#endif //RESUMEF_DEBUG_COUNTER
#ifndef RESUMEF_ENABLE_CONCEPT
#ifdef __cpp_lib_concepts
#define RESUMEF_ENABLE_CONCEPT 0
#else
#define RESUMEF_ENABLE_CONCEPT 0
#endif //#ifdef __cpp_lib_concepts
#endif //#ifndef RESUMEF_ENABLE_CONCEPT
#ifndef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE
/* #undef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE */
#endif //_WITH_LOCK_FREE_Q_KEEP_REAL_SIZE
/* #undef RESUMEF_USE_CUSTOM_SPINLOCK */
#pragma once
#ifndef RESUMEF_INLINE_STATE
#if defined(__clang__) || defined(_MSC_VER)
/* #undef RESUMEF_INLINE_STATE */
#else
/* #undef RESUMEF_INLINE_STATE */
#endif //defined(__clang__) || defined(_MSC_VER)
#endif //RESUMEF_INLINE_STATE
#ifndef RESUMEF_DEBUG_COUNTER
/* #undef RESUMEF_DEBUG_COUNTER */
#endif //RESUMEF_DEBUG_COUNTER
#ifndef RESUMEF_ENABLE_CONCEPT
#ifdef __cpp_lib_concepts
#define RESUMEF_ENABLE_CONCEPT 1
#else
#define RESUMEF_ENABLE_CONCEPT 1
#endif //#ifdef __cpp_lib_concepts
#endif //#ifndef RESUMEF_ENABLE_CONCEPT
#ifndef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE
/* #undef _WITH_LOCK_FREE_Q_KEEP_REAL_SIZE */
#endif //_WITH_LOCK_FREE_Q_KEEP_REAL_SIZE
/* #undef RESUMEF_USE_CUSTOM_SPINLOCK */

+ 5
- 7
tutorial/test_async_modern_cb.cpp View File

callback(std::to_string(value)); callback(std::to_string(value));
}).detach(); }).detach();


MODERN_CALLBACK_RETURN();
MODERN_CALLBACK_RETURN();
} }


//演示异步库有多个异步回调函数,只要按照Modern Callback范式去做回调,就不再需要写额外的代码,就可以适配到future+librf,以及更多的其他库 //演示异步库有多个异步回调函数,只要按照Modern Callback范式去做回调,就不再需要写额外的代码,就可以适配到future+librf,以及更多的其他库
callback(val1 + val2); callback(val1 + val2);
}).detach(); }).detach();


MODERN_CALLBACK_RETURN();
MODERN_CALLBACK_RETURN();
} }


//演示异步库有多个异步回调函数,只要按照Modern Callback范式去做回调,就不再需要写额外的代码,就可以适配到future+librf,以及更多的其他库 //演示异步库有多个异步回调函数,只要按照Modern Callback范式去做回调,就不再需要写额外的代码,就可以适配到future+librf,以及更多的其他库
callback(nullptr, v1, val1 / val2); callback(nullptr, v1, val1 / val2);
}).detach(); }).detach();


MODERN_CALLBACK_RETURN();
MODERN_CALLBACK_RETURN();
} }


#include "use_future.h" #include "use_future.h"


//muldiv_async函数可能会抛异常,取决于val是否是0 //muldiv_async函数可能会抛异常,取决于val是否是0
//异常将会带回到本协程里的代码,所以需要try-catch //异常将会带回到本协程里的代码,所以需要try-catch
auto ab = co_await muldiv_async(9, val, use_librf);
//C++17:
//auto [a, b] = co_await muldiv_async(9, val, use_librf);
auto [a, b] = co_await muldiv_async(9, val, use_librf);


std::string result = co_await tostring_async(std::get<0>(ab) + std::get<1>(ab), use_librf);
std::string result = co_await tostring_async(a + b, use_librf);


std::cout << result << std::endl; std::cout << result << std::endl;
} }

Loading…
Cancel
Save