#include "constants.h"
#include <QtCore/QTextStream>
-CommandListener::CommandListener(QObject *parent)
- : QThread(parent)
- , m_stopRequested(false)
+void CommandListener::readCommand()
{
-}
-
-void CommandListener::run()
-{
- QString line;
- QTextStream in(stdin, QIODevice::ReadOnly);
- do {
- line = in.readLine();
- line = line.trimmed();
- if (!line.isEmpty()) {
- emit command(line);
- if (line == QLatin1String(Constants::CMD_QUIT)
- || line == QLatin1String(Constants::CMD_QUIT2))
- return;
- }
- } while (!m_stopRequested && !line.isNull());
+ emit command(QTextStream(stdin).readLine());
}
#include <QtCore/QThread>
-class CommandListener : public QThread
-{
+class CommandListener : public QObject {
Q_OBJECT
-public:
- CommandListener(QObject *parent = 0);
+public slots:
+ void readCommand();
- void run();
-
- void requestStop() { m_stopRequested = true; }
signals:
void command(const QString &command);
-
-private:
- bool m_stopRequested;
};
#endif // COMMANDLISTENER_H
namespace Constants {
-const char CMD_HELP[] ="help";
-const char CMD_HELP2[] = "h";
-const char CMD_HELP3[] = "?";
-
const char CMD_RECORD[] ="record";
const char CMD_RECORD2[] ="r";
app.parseArguments();
if (app.isInteractive()) {
+ QThread listenerThread;
CommandListener listener;
+ listener.moveToThread(&listenerThread);
QObject::connect(&listener, SIGNAL(command(QString)), &app, SLOT(userCommand(QString)));
- listener.start();
+ QObject::connect(&app, SIGNAL(readyForCommand()), &listener, SLOT(readCommand()));
+ listenerThread.start();
int exitValue = app.exec();
+ listenerThread.quit();
// wait for listener to exit
- listener.wait();
+ listenerThread.wait();
return exitValue;
} else {
return app.exec();
void QmlProfilerApplication::userCommand(const QString &command)
{
QString cmd = command.trimmed();
- if (cmd == Constants::CMD_HELP
- || cmd == Constants::CMD_HELP2
- || cmd == Constants::CMD_HELP3) {
- printCommands();
- } else if (cmd == Constants::CMD_RECORD
- || cmd == Constants::CMD_RECORD2) {
+ if (cmd == Constants::CMD_RECORD || cmd == Constants::CMD_RECORD2) {
m_qmlProfilerClient.sendRecordingStatus(!m_recording);
m_v8profilerClient.sendRecordingStatus(!m_recording);
+ emit readyForCommand();
} else if (cmd == Constants::CMD_QUIT
|| cmd == Constants::CMD_QUIT2) {
print(QLatin1String("Quit"));
} else {
quit();
}
+ } else {
+ printCommands();
+ emit readyForCommand();
}
}
}
m_connectTimer.start();
+ emit readyForCommand();
}
void QmlProfilerApplication::tryToConnect()
int exec();
bool isInteractive() const;
+signals:
+ void readyForCommand();
+
public slots:
void userCommand(const QString &command);
void notifyTraceStarted();