基于C++ Coroutines提案 ‘Stackless Resumable Functions’编写的协程库
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

test_async_dynamic_go.cpp 1.1KB

vor 6 Jahren
vor 6 Jahren
vor 6 Jahren
vor 6 Jahren
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. 
  2. #include <chrono>
  3. #include <iostream>
  4. #include <string>
  5. #include <conio.h>
  6. #include "librf.h"
  7. static const int M = 10;
  8. size_t dynamic_go_count = 0;
  9. std::array<std::array<std::array<int32_t, M>, M>, 3> dynamic_cells;
  10. void test_dynamic_go()
  11. {
  12. auto co_star = [](int j) -> resumef::future_t<int>
  13. {
  14. for (int i = 0; i < M; ++i)
  15. {
  16. go[=]() -> resumef::generator_t<int>
  17. {
  18. for (int k = 0; k < M; ++k)
  19. {
  20. ++dynamic_cells[j][i][k];
  21. ++dynamic_go_count;
  22. std::cout << j << " " << i << " " << k << std::endl;
  23. co_yield k;
  24. }
  25. co_return M;
  26. };
  27. co_yield i;
  28. }
  29. co_return M;
  30. };
  31. go co_star(0);
  32. go co_star(1);
  33. go co_star(2);
  34. resumef::this_scheduler()->run_until_notask();
  35. std::cout << "dynamic_go_count = " << dynamic_go_count << std::endl;
  36. for (auto & j : dynamic_cells)
  37. {
  38. for (auto & i : j)
  39. {
  40. for (auto k : i)
  41. std::cout << k;
  42. std::cout << std::endl;
  43. }
  44. std::cout << std::endl;
  45. }
  46. }
  47. void resumable_main_dynamic_go()
  48. {
  49. test_dynamic_go();
  50. }