calprocess.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "calprocess.h"
  2. #include "logger.h"
  3. #include "defs.h"
  4. #include <QSettings>
  5. #include <QMetaEnum>
  6. CalProcess::CalProcess(QObject *parent)
  7. {
  8. // start("/home/forlinx/Desktop/workspace/TPMFM-A/extracted_params20251205.xml", NETPARSE_FIFO_PATH, CALCULATE_FIFO_PATH);
  9. restart();
  10. connect(&m_timer, &QTimer::timeout, this, [this](){
  11. QString state = QMetaEnum::fromType<QProcess::ProcessState>().valueToKey(m_process.state());
  12. QString error = QMetaEnum::fromType<QProcess::ProcessError>().valueToKey(m_process.error());
  13. // LOG_INFO("calculate process state: {}, {}", static_cast<int>(m_process.state()), static_cast<int>(m_process.error()));
  14. if(m_process.state() != QProcess::Running) {
  15. LOG_INFO("calculate process state: {}, error: {}", state.toStdString(), error.toStdString());
  16. }
  17. });
  18. m_timer.start(2000);
  19. }
  20. CalProcess::~CalProcess()
  21. {
  22. stop();
  23. }
  24. void CalProcess::start(const QString &configure)
  25. {
  26. if (m_process.state() != QProcess::NotRunning) {
  27. LOG_WARN("netparse is already running!");
  28. return;
  29. }
  30. LOG_INFO("calculate process configure: {}", configure.toStdString());
  31. QString program = "/usr/bin/python";
  32. QStringList args;
  33. args << "/home/forlinx/Desktop/workspace/dataParsing/formula_calculation.py";
  34. args << configure;
  35. args << NETPARSE_FIFO_PATH;
  36. args << CALCULATE_FIFO_PATH;
  37. LOG_INFO("calculate process args: {}", args.join(" ").toStdString());
  38. // save formula configure file path
  39. QSettings settings("storage/conf/settings.ini", QSettings::IniFormat);
  40. settings.setIniCodec("UTF-8");
  41. settings.beginGroup("CONFIGURE");
  42. settings.setValue("CALCULATE", configure);
  43. settings.endGroup();
  44. m_process.start(program, args);
  45. }
  46. void CalProcess::stop()
  47. {
  48. if (m_process.state() == QProcess::NotRunning) {
  49. LOG_INFO("netparse is not running!");
  50. return;
  51. }
  52. LOG_INFO("stopping netparse...");
  53. m_process.kill(); // 强制终止
  54. m_process.waitForFinished(); // 等待退出
  55. LOG_INFO("netparse stopped.");
  56. }
  57. void CalProcess::restart(const QString &configure)
  58. {
  59. stop();
  60. if(configure.isEmpty()) {
  61. QSettings settings("storage/conf/settings.ini", QSettings::IniFormat);
  62. settings.setIniCodec("UTF-8");
  63. settings.beginGroup("CONFIGURE");
  64. if(settings.contains("CALCULATE"))
  65. start(settings.value("CALCULATE").toString());
  66. else
  67. start(configure);
  68. settings.endGroup();
  69. } else {
  70. start(configure);
  71. }
  72. }
  73. bool CalProcess::isRunning()
  74. {
  75. return m_process.state() != QProcess::NotRunning;
  76. }