diff --git a/tutorial/test_async_cinatra_client.cpp b/benchmark/test_async_cinatra_client.cpp similarity index 100% rename from tutorial/test_async_cinatra_client.cpp rename to benchmark/test_async_cinatra_client.cpp diff --git a/librf/src/state.inl b/librf/src/state.inl index 2da5c7c..9eae473 100644 --- a/librf/src/state.inl +++ b/librf/src/state.inl @@ -111,7 +111,7 @@ namespace resumef std::rethrow_exception(std::make_exception_ptr(future_exception{ error_code::not_ready })); break; case result_type::Exception: - std::rethrow_exception(std::move(this->_exception)); + std::rethrow_exception(std::exchange(this->_exception, nullptr)); break; default: break; diff --git a/modern_cb b/modern_cb index b3b4614..6c3135d 160000 --- a/modern_cb +++ b/modern_cb @@ -1 +1 @@ -Subproject commit b3b4614af0a37cae4c903c86b4f234fc5f96c38e +Subproject commit 6c3135d07e1d935ea924f61a11307bf5e466dec9 diff --git a/test_librf.cpp b/test_librf.cpp index fa52aef..c589993 100644 --- a/test_librf.cpp +++ b/test_librf.cpp @@ -9,7 +9,7 @@ extern void resumable_main_sleep(); extern void resumable_main_routine(); extern void resumable_main_resumable(); extern void resumable_main_mutex(); -extern void resumable_main_exception(); +extern void resumable_main_exception(bool bomb); extern void resumable_main_event(); extern void resumable_main_event_v2(); extern void resumable_main_event_timeout(); @@ -36,7 +36,7 @@ int main(int argc, const char* argv[]) (void)argc; (void)argv; - //test_async_cinatra_client(); + //resumable_main_exception(false); //return 0; //if (argc > 1) @@ -51,7 +51,7 @@ int main(int argc, const char* argv[]) resumable_main_yield_return(); resumable_main_resumable(); resumable_main_routine(); - resumable_main_exception(); + resumable_main_exception(false); resumable_main_dynamic_go(); resumable_main_multi_thread(); resumable_main_timer(); diff --git a/tutorial/test_async_cb.cpp b/tutorial/test_async_cb.cpp index f2e4ed5..7e2de67 100644 --- a/tutorial/test_async_cb.cpp +++ b/tutorial/test_async_cb.cpp @@ -83,6 +83,7 @@ static future_t resumable_get_string(std::string& val) void resumable_main_cb() { + std::cout << __FUNCTION__ << std::endl; //由于使用者可能不能明确的区分是resume function返回的awaitor还是awaitable function返回的awaitor //导致均有可能加入到协程里去调度。 //所以,协程调度器应该需要能处理这种情况。 diff --git a/tutorial/test_async_exception.cpp b/tutorial/test_async_exception.cpp index dc57dba..be359bc 100644 --- a/tutorial/test_async_exception.cpp +++ b/tutorial/test_async_exception.cpp @@ -56,9 +56,9 @@ future_t<> test_signal_exception() auto r = co_await async_signal_exception2(i); std::cout << "result is " << r << std::endl; } - catch (const std::exception& e) + catch (const std::exception& ex) { - std::cout << "exception signal : " << e.what() << std::endl; + std::cout << "exception signal : " << ex.what() << std::endl; } catch (...) { @@ -76,13 +76,16 @@ future_t<> test_bomb_exception() } } -void resumable_main_exception() +void resumable_main_exception(bool bomb) { + std::cout << __FUNCTION__ << std::endl; go test_signal_exception(); this_scheduler()->run_until_notask(); std::cout << std::endl; - - go test_bomb_exception(); - this_scheduler()->run_until_notask(); + if (bomb) + { + go test_bomb_exception(); + this_scheduler()->run_until_notask(); + } } diff --git a/tutorial/test_async_modern_cb.cpp b/tutorial/test_async_modern_cb.cpp index 12f166e..a096bae 100644 --- a/tutorial/test_async_modern_cb.cpp +++ b/tutorial/test_async_modern_cb.cpp @@ -151,6 +151,7 @@ static void example_librf() void resumable_main_modern_cb() { + std::cout << __FUNCTION__ << std::endl; example_future(); example_librf(); } \ No newline at end of file diff --git a/tutorial/test_async_resumable.cpp b/tutorial/test_async_resumable.cpp index 3e8911d..814dd85 100644 --- a/tutorial/test_async_resumable.cpp +++ b/tutorial/test_async_resumable.cpp @@ -53,6 +53,7 @@ void resumable_switch(intptr_t coro, size_t idx) void resumable_main_resumable() { + std::cout << __FUNCTION__ << std::endl; resumable_switch(1, 99); resumable_switch(1, 0); diff --git a/tutorial/test_async_routine.cpp b/tutorial/test_async_routine.cpp index 5926c9c..6a19145 100644 --- a/tutorial/test_async_routine.cpp +++ b/tutorial/test_async_routine.cpp @@ -36,6 +36,7 @@ future_t<> test_routine_use_timer_2() void resumable_main_routine() { + std::cout << __FUNCTION__ << std::endl; //go test_routine_use_timer_2(); #ifndef __GNUC__ //GCC: ûṩ__builtin_coro_frameú go test_routine_use_timer(); diff --git a/tutorial/test_async_suspend_always.cpp b/tutorial/test_async_suspend_always.cpp index 5116379..bab171c 100644 --- a/tutorial/test_async_suspend_always.cpp +++ b/tutorial/test_async_suspend_always.cpp @@ -50,6 +50,7 @@ future_t<> test_recursive_go() void resumable_main_suspend_always() { + std::cout << __FUNCTION__ << std::endl; go test_recursive_await(); go test_recursive_go(); this_scheduler()->run_until_notask(); diff --git a/tutorial/test_async_yield_return.cpp b/tutorial/test_async_yield_return.cpp index 5d619bb..50d93eb 100644 --- a/tutorial/test_async_yield_return.cpp +++ b/tutorial/test_async_yield_return.cpp @@ -73,6 +73,7 @@ auto test_yield_future() -> future_t void resumable_main_yield_return() { + std::cout << __FUNCTION__ << std::endl; for (int i : test_yield_int()) { std::cout << i << " had return" << std::endl; diff --git a/vs_proj/librf.vcxproj b/vs_proj/librf.vcxproj index ab71ea4..174e542 100644 --- a/vs_proj/librf.vcxproj +++ b/vs_proj/librf.vcxproj @@ -190,6 +190,12 @@ + + true + true + true + true + @@ -205,12 +211,6 @@ - - true - true - true - true - diff --git a/vs_proj/librf.vcxproj.filters b/vs_proj/librf.vcxproj.filters index d7bbc46..101c552 100644 --- a/vs_proj/librf.vcxproj.filters +++ b/vs_proj/librf.vcxproj.filters @@ -133,8 +133,8 @@ tutorial - - tutorial + + benchmark