ivchart_impl.cpp 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #include "ivchart_impl.h"
  2. namespace iv {
  3. ivchart_impl::ivchart_impl()
  4. {
  5. mmsg = QDBusMessage::createSignal("/catarc/adc", "adciv.interface", "ivchart");
  6. mmsg<<1;
  7. }
  8. ivchart_impl::~ivchart_impl()
  9. {
  10. requestInterruption();
  11. int i;
  12. for(i=0;i<100;i++)
  13. {
  14. if(isFinished())
  15. break;
  16. msleep(1);
  17. }
  18. }
  19. void ivchart_impl::chartvalue(std::string varname, const double fvalue, const double fvalue_RangeMin, const double fvalue_RangeMax)
  20. {
  21. iv::ivchart::ivchartunit xivchartunit;
  22. xivchartunit.set_strvarname(varname);
  23. xivchartunit.set_timex(QDateTime::currentMSecsSinceEpoch());
  24. xivchartunit.set_fvalue(fvalue);
  25. xivchartunit.set_fvalue_rangemin(fvalue_RangeMin);
  26. xivchartunit.set_fvalue_rangemax(fvalue_RangeMax);
  27. if(mvectorchart.xivchartunit_size() > 10000)
  28. {
  29. qDebug("ivchart_impl::chartvalue ivchartunit is big value is %d ",mvectorchart.xivchartunit_size());
  30. return;
  31. }
  32. mMutexVector.lock();
  33. iv::ivchart::ivchartunit * p = mvectorchart.add_xivchartunit();
  34. p->CopyFrom(xivchartunit);
  35. mMutexVector.unlock();
  36. }
  37. int ivchart_impl::writechart(iv::ivchart::ivchartarray *pxvectorchart)
  38. {
  39. char * str;
  40. int ndatasize = pxvectorchart->ByteSize();
  41. str = new char[ndatasize];
  42. std::shared_ptr<char> pstr;
  43. pstr.reset(str);
  44. if(!pxvectorchart->SerializeToArray(str,ndatasize))
  45. {
  46. qDebug("ivchart_impl::writechart SerializeToArray error.");
  47. return -1;
  48. }
  49. QByteArray ba;
  50. ba.append(str,ndatasize);
  51. QList<QVariant> x;
  52. x<<ba;
  53. mmsg.setArguments(x);
  54. QDBusConnection::sessionBus().send(mmsg);
  55. return 0;
  56. }
  57. void ivchart_impl::run()
  58. {
  59. iv::ivchart::ivchartarray xvectorchart;
  60. while(!QThread::isInterruptionRequested())
  61. {
  62. mWaitMutex.lock();
  63. mwc.wait(&mWaitMutex,50);
  64. mWaitMutex.unlock();
  65. mMutexVector.lock();
  66. xvectorchart.Clear();
  67. xvectorchart.CopyFrom(mvectorchart);
  68. mvectorchart.Clear();
  69. mMutexVector.unlock();
  70. if(xvectorchart.xivchartunit_size()>0)
  71. {
  72. writechart(&xvectorchart);
  73. }
  74. }
  75. }
  76. }