visit.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include <thread>
  2. #include <chrono>
  3. #include "write-copy.h"
  4. #ifdef _TEST_
  5. struct card
  6. {
  7. int id;
  8. card(int _id):id(_id){}
  9. };
  10. struct card_list:single_base<card_list,int,std::shared_ptr<card>>
  11. {
  12. void accept(visitor<std::shared_ptr<card>>&v)
  13. {
  14. for(std::pair<int,std::shared_ptr<card>> me:m_map)
  15. {
  16. v.visit(me.second);
  17. while(true)
  18. {
  19. printf("%p--xxxxxx---\n",this);
  20. std::this_thread::sleep_for(std::chrono::milliseconds(500));
  21. }
  22. }
  23. }
  24. };
  25. struct visit_log:visitor<std::shared_ptr<card>>
  26. {
  27. bool visit(std::shared_ptr<card> c)
  28. {
  29. printf("%d\n",c->id);
  30. return true;
  31. }
  32. };
  33. template<> std::shared_ptr<card_list> single_base<card_list,int,std::shared_ptr<card>>::m_instance=std::make_shared<card_list>();
  34. void run()
  35. {
  36. visit_log vl;
  37. card_list::instance()->accept(vl);
  38. /*
  39. while(true)
  40. {
  41. printf("111111111111\n");
  42. std::this_thread::sleep_for(std::chrono::milliseconds(500));
  43. }
  44. */
  45. }
  46. int main()
  47. {
  48. std::vector<std::shared_ptr<card_list>> v;
  49. std::thread th(run);
  50. for(int i=0;i<100;i++)
  51. {
  52. card_list::instance()->add(i,std::make_shared<card>(i));//每次生成一个对象
  53. printf("%d %p\n",i,card_list::instance().get());
  54. // v.push_back(card_list::instance());
  55. }
  56. for(int i=0;i<100;i++)
  57. {
  58. // printf("%d %p\n",i,v[i].get());
  59. }
  60. th.join();
  61. //card_list::instance()->accept(vl);
  62. return 0;
  63. }
  64. #endif