Files
clients/EffectUI/sparentprocess.h
admin ffbaf3084f logwidget 추가
git-svn-id: svn://192.168.0.12/source@301 8346c931-da38-4b9b-9d4c-e48b93cbd075
2016-10-20 04:14:57 +00:00

101 lines
2.5 KiB
C++

#ifndef SPARENTPROCESS
#define SPARENTPROCESS
#include <QObject>
#include "sutilclass.h"
#include <QVector>
#include <QMap>
#include <QProcess>
class QStringList;
class QString;
class SParentProcess: public QObject
{
Q_OBJECT
protected:
enum class E_INNER_RUN_MODE:unsigned short
{
MODE_WAIT = 0,
MODE_RUN_INIT,
MODE_RUN_EVENTCODE,
MODE_WAIT_INIT,
MODE_WAIT_EVENTCODE,
MODE_WAIT_TERMINATE,
MODE_WAIT_HANGING,
MODE_FINISH = MODE_WAIT
};
public:
SParentProcess();
virtual void setList(const QVector<int>& _list) = 0;
virtual void setList(QVector<int>&& _list) = 0;
virtual void setList(const QVector<SEffectRow>& _list) = 0;
virtual void setList(QVector<SEffectRow>&& _list) = 0;
virtual void runInit() = 0;
virtual void runEventCode() = 0;
virtual void clear();
QVector<SEffectRow> getErrorList() const;
SReportSummary getReportSummary(int _id) const;
QMap<int, SReportSummary> getReportSummary() const;
SError getError() const;
bool isWaiting() const;
void setModeWait();
private:
SError analyzeStdOut(const QString& _str);
QString makeLog(const SError& _error);
protected:
QStringList getProcessArguments(const SEffectRow& _row) const;
QStringList getProcessArguments(SEffectRow&& _row) const;
void setError(const SError& _error);
void setError(SError&& _error);
void setInnerMode(E_INNER_RUN_MODE _mode);
bool isUserAbort();
void setCurrentEffectRow(const SEffectRow& _row);
void setCurrentEffectRow(SEffectRow&& _row);
void runProcess(QStringList _arguments);
public slots:
void stop();
void update();
void finishedProcess(int exitCode, QProcess::ExitStatus exitStatus);
signals:
void signalUserAbort();
void signalTerminateError(const SError& _error);
void signalTerminateNormal();
void signalTerminate();
void signalLog(const QString& _log);
void signalTerminateEachEvent(int _company, E_CRAWL_STATE _state);
protected slots:
void slotTerminateError(const SError& _error);
private:
QProcess* m_pProcess;
E_INNER_RUN_MODE m_eInnerMode;
SEffectRow m_erCurrentRow;
QVector<SEffectRow> m_vecError;
bool m_bRunning;
unsigned int nTime;
SError m_error;
bool m_bUserAbort;
QMap<int, SReportSummary> m_mapReportSummary;
};
#endif // SPARENTPROCESS