123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
-
- #include <chrono>
- #include <iostream>
- #include <string>
- #include <thread>
-
- #include "librf/librf.h"
-
- using namespace librf;
-
- future_t<> test_loop_sleep(size_t _N, const char * ch)
- {
- using namespace std::chrono;
-
- for (size_t i = 0; i < _N; ++i)
- {
- co_await librf::sleep_for(100ms);
- std::cout << ch;
- }
- std::cout << std::endl;
- }
-
- future_t<> test_recursive_await()
- {
- std::cout << "A:---1" << std::endl;
- co_await test_loop_sleep(5, "=");
-
- std::cout << "A:---2" << std::endl;
- co_await test_loop_sleep(6, "=");
-
- std::cout << "A:---3" << std::endl;
- co_await test_loop_sleep(7, "=");
-
- std::cout << "A:---4" << std::endl;
- }
-
- future_t<> test_recursive_go()
- {
- std::cout << "B:---1" << std::endl;
- co_await test_loop_sleep(3, "+");
-
- std::cout << "B:---2" << std::endl;
- go test_loop_sleep(8, "*");
-
- std::cout << "B:---3" << std::endl;
- co_await test_loop_sleep(4, "+");
-
- std::cout << "B:---4" << std::endl;
- }
-
- void resumable_main_suspend_always()
- {
- std::cout << __FUNCTION__ << std::endl;
- go test_recursive_await();
- go test_recursive_go();
- this_scheduler()->run_until_notask();
- }
-
- /*
- resume from 0000016B8477CE00 on thread 7752
-
- resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .
- resume from 0000016B8477CE00 on thread 7752
-
- resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .
- resume from 0000016B8477CE00 on thread 7752
-
- resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .resume from 0000016B847726C0 on thread 7752
- .
- resume from 0000016B8477CE00 on thread 7752
-
- 说明有四个协程对象(其中三个对象的内存被复用,表现为地址一样)
- test_recursive_await -> 0000016B8477CE00
- test_loop_sleep<5> -> 0000016B847726C0
- test_loop_sleep<6> -> 0000016B847726C0
- test_loop_sleep<7> -> 0000016B847726C0
- */
-
- int main()
- {
- resumable_main_suspend_always();
- return 0;
- }
|