CVoiceWorker.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #include "../pch/pch.h"
  2. #include "CVoiceWorker.h"
  3. #include "mmsystem.h"
  4. void CVoiceWorker::Start()
  5. {
  6. m_is_work = true;
  7. m_nStopNum = 0;
  8. //处理声音提醒
  9. std::thread(&CVoiceWorker::HandleVoice, this).detach();
  10. }
  11. void CVoiceWorker::Stop()
  12. {
  13. m_is_work = false;
  14. m_voice_mutex.lock();
  15. while (!m_voice_queue.empty())
  16. {
  17. m_voice_queue.pop();
  18. }
  19. m_voice_mutex.unlock();
  20. }
  21. void CVoiceWorker::AddVoice(int voice_type)
  22. {
  23. m_voice_mutex.lock();
  24. m_voice_queue.push(voice_type);
  25. m_voice_mutex.unlock();
  26. }
  27. void CVoiceWorker::HandleVoice()
  28. {
  29. while (m_is_work)
  30. {
  31. m_voice_mutex.lock();
  32. if (m_voice_queue.empty())
  33. {
  34. m_voice_mutex.unlock();
  35. CSystem::my_sleep(1);
  36. continue;
  37. }
  38. int voice_type = m_voice_queue.front();
  39. m_voice_queue.pop();
  40. m_voice_mutex.unlock();
  41. if (voice_type == 1)
  42. {
  43. wstring path = CSystem::GetProgramDir() + L"\\music\\waimai_new.wav";
  44. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  45. }
  46. else if (voice_type == 2)
  47. {
  48. wstring path = CSystem::GetProgramDir() + L"\\music\\waimai_new_auto.wav";
  49. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  50. }
  51. else if (voice_type == 3)
  52. {
  53. wstring path = CSystem::GetProgramDir() + L"\\music\\waimai_quxiao.wav";
  54. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  55. }
  56. else if (voice_type == 4)
  57. {
  58. wstring path = CSystem::GetProgramDir() + L"\\music\\waimai_tuikuan.wav";
  59. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  60. }
  61. else if (voice_type == 5)
  62. {
  63. wstring path = CSystem::GetProgramDir() + L"\\music\\diannei_new.wav";
  64. PlaySound(path.c_str(), NULL, SND_FILENAME | SND_ASYNC);
  65. }
  66. //8秒内最多播放一次
  67. CSystem::my_sleep(8);
  68. }
  69. AddStopNum();
  70. }
  71. void CVoiceWorker::AddStopNum()
  72. {
  73. m_nStopNumMutex.lock();
  74. m_nStopNum++;
  75. m_nStopNumMutex.unlock();
  76. }