workthread.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "WorkThread.h"
  2. #include "datavar.h"
  3. #include "base64.h"
  4. #include "client.h"
  5. #include <util.h>
  6. #include "container/threadsafequeue.h"
  7. GrabThread::GrabThread()
  8. {
  9. //qRegisterMetaType<HalconCpp::HObject>(" HalconCpp::HObject&");
  10. m_stopFlag = false;
  11. }
  12. GrabThread::~GrabThread()
  13. {
  14. if ( isRunning())
  15. {
  16. m_stopFlag = true;
  17. while (isRunning()) QThread::usleep(5);
  18. }
  19. }
  20. void GrabThread::run()
  21. {
  22. //用于保存图片到队列
  23. cv::Mat src;
  24. cv::Mat t;
  25. while (!m_stopFlag)
  26. {
  27. if (DataVar::g_camOrFileMode == 0 && DataVar::g_camTriggerMode != 1) //执行条件:相机模式 及 非软触发模式
  28. {
  29. long nRet = DataVar::g_camera->getOneImage(src);
  30. if (nRet == 0)
  31. {
  32. DataVar::g_imgsQueue.push(src);
  33. }
  34. else
  35. {
  36. QThread::msleep(5);
  37. }
  38. }
  39. }
  40. }
  41. WorkThread::WorkThread()
  42. {
  43. m_stopFlag = false;
  44. m_stateReady = true;
  45. }
  46. WorkThread::~WorkThread()
  47. {
  48. if (isRunning())
  49. {
  50. m_stopFlag = true;
  51. while (isRunning()) QThread::usleep(5);
  52. }
  53. }
  54. void WorkThread::run()
  55. {
  56. while (!m_stopFlag)
  57. {
  58. //执行条件:相机模式 及 外触发模式
  59. if (m_stateReady && DataVar::g_camOrFileMode == 0 && DataVar::g_camTriggerMode > 1 && !DataVar::instance()->getPicRef()->isNull())
  60. {
  61. emit sig_runAlg(); //运行算法
  62. m_stateReady = false;
  63. }
  64. else
  65. {
  66. QThread::msleep(5);
  67. }
  68. }
  69. }
  70. void WorkThread::changeAlgState(bool r)
  71. {
  72. m_stateReady = r;
  73. }