CMessagePush.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "../pch/pch.h"
  2. #include "CMessagePush.h"
  3. #include "../tool/CPosPrinter.h"
  4. CMessagePush::~CMessagePush()
  5. {
  6. }
  7. void CMessagePush::Start()
  8. {
  9. m_is_work = true;
  10. m_nStopNum = 0;
  11. //处理打印
  12. std::thread(&CMessagePush::HandlePrinter, this).detach();
  13. }
  14. void CMessagePush::Stop()
  15. {
  16. m_is_work = false;
  17. }
  18. void CMessagePush::AddPinter(std::string out_order_no, int print_type)
  19. {
  20. m_printer_mutex.lock();
  21. ShouyinPinterInfo newPrinter;
  22. newPrinter.out_order_no = out_order_no;
  23. newPrinter.print_type = print_type;
  24. m_printer_queue.push(newPrinter);
  25. m_printer_mutex.unlock();
  26. }
  27. void CMessagePush::HandlePrinter()
  28. {
  29. while(m_is_work)
  30. {
  31. m_printer_mutex.lock();
  32. if(m_printer_queue.empty())
  33. {
  34. m_printer_mutex.unlock();
  35. CSystem::my_sleep(1);
  36. continue;
  37. }
  38. ShouyinPinterInfo printerInfo = m_printer_queue.front();
  39. std::string out_order_no = printerInfo.out_order_no;
  40. int print_type = printerInfo.print_type;
  41. m_printer_queue.pop();
  42. m_printer_mutex.unlock();
  43. if(print_type == 1)
  44. {
  45. //支付成功订单
  46. CShouyinOrder order;
  47. bool ret = order.InitData(out_order_no);
  48. CPosPrinter printer;
  49. printer.PrintZhifu(order);
  50. }
  51. else if (print_type == 2)
  52. {
  53. //退款成功订单
  54. CShouyinOrder order;
  55. bool ret = order.InitData(out_order_no);
  56. CPosPrinter printer;
  57. printer.PrintTuikuan(order);
  58. }
  59. else
  60. {
  61. //打印测试的订单
  62. CPosPrinter printer;
  63. printer.PrintTest();
  64. }
  65. }
  66. AddStopNum();
  67. }
  68. void CMessagePush::AddStopNum()
  69. {
  70. m_nStopNumMutex.lock();
  71. m_nStopNum++;
  72. m_nStopNumMutex.unlock();
  73. if(m_nStopNum == 1)
  74. {
  75. //确认所有子线程都退出了,再删除自己
  76. delete this;
  77. }
  78. }