Some small improvements to IPC handling.
This commit is contained in:
parent
014a9bee57
commit
9848d78beb
@ -112,7 +112,7 @@ void IPCReceiveThread::receiveLoop(void)
|
|||||||
{
|
{
|
||||||
QStringList args;
|
QStringList args;
|
||||||
int command;
|
int command;
|
||||||
if(m_ipc->popCommand(command, args))
|
if(m_ipc->popCommand(command, args, &m_stopped))
|
||||||
{
|
{
|
||||||
if((command >= 0) && (command < IPC::IPC_OPCODE_MAX))
|
if((command >= 0) && (command < IPC::IPC_OPCODE_MAX))
|
||||||
{
|
{
|
||||||
@ -255,7 +255,7 @@ bool IPC::pushCommand(const int &command, const QStringList *args)
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool IPC::popCommand(int &command, QStringList &args)
|
bool IPC::popCommand(int &command, QStringList &args, volatile bool *abortFlag)
|
||||||
{
|
{
|
||||||
command = -1;
|
command = -1;
|
||||||
args.clear();
|
args.clear();
|
||||||
@ -296,8 +296,11 @@ bool IPC::popCommand(int &command, QStringList &args)
|
|||||||
memory->counter--;
|
memory->counter--;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
if(!abortFlag)
|
||||||
{
|
{
|
||||||
qWarning("IPC: Shared memory is empty -> cannot pop string!");
|
qWarning("IPC: Shared memory is empty -> cannot pop string!");
|
||||||
|
}
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
12
src/ipc.h
12
src/ipc.h
@ -48,6 +48,7 @@ public:
|
|||||||
bool sendAsync(const int &command, const QStringList &args, const int timeout = 5000);
|
bool sendAsync(const int &command, const QStringList &args, const int timeout = 5000);
|
||||||
|
|
||||||
inline bool isInitialized(void) { return (m_initialized >= 0); }
|
inline bool isInitialized(void) { return (m_initialized >= 0); }
|
||||||
|
inline bool isListening(void);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
bool startListening(void);
|
bool startListening(void);
|
||||||
@ -57,7 +58,7 @@ signals:
|
|||||||
void receivedCommand(const int &command, const QStringList &args);
|
void receivedCommand(const int &command, const QStringList &args);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool popCommand(int &command, QStringList &args);
|
bool popCommand(int &command, QStringList &args, volatile bool *abortFlag);
|
||||||
bool pushCommand(const int &command, const QStringList *args);
|
bool pushCommand(const int &command, const QStringList *args);
|
||||||
|
|
||||||
int m_initialized;
|
int m_initialized;
|
||||||
@ -111,3 +112,12 @@ private:
|
|||||||
volatile bool m_stopped;
|
volatile bool m_stopped;
|
||||||
IPC *const m_ipc;
|
IPC *const m_ipc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Inline Functions
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
inline bool IPC::isListening(void)
|
||||||
|
{
|
||||||
|
return (m_recvThread && m_recvThread->isRunning());
|
||||||
|
}
|
||||||
|
@ -26,10 +26,10 @@
|
|||||||
#define VER_X264_MAJOR 2
|
#define VER_X264_MAJOR 2
|
||||||
#define VER_X264_MINOR 3
|
#define VER_X264_MINOR 3
|
||||||
#define VER_X264_PATCH 0
|
#define VER_X264_PATCH 0
|
||||||
#define VER_X264_BUILD 733
|
#define VER_X264_BUILD 734
|
||||||
|
|
||||||
#define VER_X264_MINIMUM_REV 2363
|
#define VER_X264_MINIMUM_REV 2380
|
||||||
#define VER_X264_CURRENT_API 140
|
#define VER_X264_CURRENT_API 142
|
||||||
#define VER_X264_AVS2YUV_VER 242
|
#define VER_X264_AVS2YUV_VER 242
|
||||||
|
|
||||||
#define VER_X264_PORTABLE_EDITION (0)
|
#define VER_X264_PORTABLE_EDITION (0)
|
||||||
|
@ -62,10 +62,8 @@ const char *tpl_last = "<LAST_USED>";
|
|||||||
#define SET_FONT_BOLD(WIDGET,BOLD) do { QFont _font = WIDGET->font(); _font.setBold(BOLD); WIDGET->setFont(_font); } while(0)
|
#define SET_FONT_BOLD(WIDGET,BOLD) do { QFont _font = WIDGET->font(); _font.setBold(BOLD); WIDGET->setFont(_font); } while(0)
|
||||||
#define SET_TEXT_COLOR(WIDGET,COLOR) do { QPalette _palette = WIDGET->palette(); _palette.setColor(QPalette::WindowText, (COLOR)); _palette.setColor(QPalette::Text, (COLOR)); WIDGET->setPalette(_palette); } while(0)
|
#define SET_TEXT_COLOR(WIDGET,COLOR) do { QPalette _palette = WIDGET->palette(); _palette.setColor(QPalette::WindowText, (COLOR)); _palette.setColor(QPalette::Text, (COLOR)); WIDGET->setPalette(_palette); } while(0)
|
||||||
#define LINK(URL) "<a href=\"" URL "\">" URL "</a>"
|
#define LINK(URL) "<a href=\"" URL "\">" URL "</a>"
|
||||||
|
#define ENSURE_APP_IS_IDLE() do { if(m_status != STATUS_IDLE) { qWarning("Cannot perfrom this action at this time!"); return; } } while(0)
|
||||||
#define INIT_ERROR_EXIT() do { m_status = STATUS_EXITTING; close(); qApp->exit(-1); return; } while(0)
|
#define INIT_ERROR_EXIT() do { m_status = STATUS_EXITTING; close(); qApp->exit(-1); return; } while(0)
|
||||||
#define ENSURE_APP_IS_IDLE() do { if(m_status != STATUS_IDLE) return; } while(0)
|
|
||||||
|
|
||||||
//static int exceptionFilter(_EXCEPTION_RECORD *dst, _EXCEPTION_POINTERS *src) { memcpy(dst, src->ExceptionRecord, sizeof(_EXCEPTION_RECORD)); return EXCEPTION_EXECUTE_HANDLER; }
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
// Constructor & Destructor
|
// Constructor & Destructor
|
||||||
@ -198,6 +196,7 @@ MainWindow::MainWindow(const x264_cpu_t *const cpuFeatures, IPC *ipc)
|
|||||||
*/
|
*/
|
||||||
MainWindow::~MainWindow(void)
|
MainWindow::~MainWindow(void)
|
||||||
{
|
{
|
||||||
|
m_status = STATUS_EXITTING;
|
||||||
OptionsModel::saveTemplate(m_options, QString::fromLatin1(tpl_last));
|
OptionsModel::saveTemplate(m_options, QString::fromLatin1(tpl_last));
|
||||||
|
|
||||||
X264_DELETE(m_jobList);
|
X264_DELETE(m_jobList);
|
||||||
@ -211,17 +210,10 @@ MainWindow::~MainWindow(void)
|
|||||||
X264_DELETE(temp);
|
X264_DELETE(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if(m_ipc->isListening())
|
||||||
if(m_ipcThread->isRunning())
|
|
||||||
{
|
{
|
||||||
m_ipcThread->setAbort();
|
m_ipc->stopListening();
|
||||||
if(!m_ipcThread->wait(5000))
|
|
||||||
{
|
|
||||||
m_ipcThread->terminate();
|
|
||||||
m_ipcThread->wait();
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
X264_DELETE(m_preferences);
|
X264_DELETE(m_preferences);
|
||||||
X264_DELETE(m_recentlyUsed);
|
X264_DELETE(m_recentlyUsed);
|
||||||
@ -339,6 +331,8 @@ void MainWindow::browseButtonPressed(void)
|
|||||||
*/
|
*/
|
||||||
void MainWindow::pauseButtonPressed(bool checked)
|
void MainWindow::pauseButtonPressed(bool checked)
|
||||||
{
|
{
|
||||||
|
ENSURE_APP_IS_IDLE();
|
||||||
|
|
||||||
if(checked)
|
if(checked)
|
||||||
{
|
{
|
||||||
m_jobList->pauseJob(ui->jobsView->currentIndex());
|
m_jobList->pauseJob(ui->jobsView->currentIndex());
|
||||||
@ -570,6 +564,8 @@ void MainWindow::showAbout(void)
|
|||||||
*/
|
*/
|
||||||
void MainWindow::showWebLink(void)
|
void MainWindow::showWebLink(void)
|
||||||
{
|
{
|
||||||
|
ENSURE_APP_IS_IDLE();
|
||||||
|
|
||||||
if(QObject::sender() == ui->actionWebMulder) QDesktopServices::openUrl(QUrl(home_url));
|
if(QObject::sender() == ui->actionWebMulder) QDesktopServices::openUrl(QUrl(home_url));
|
||||||
if(QObject::sender() == ui->actionWebX264) QDesktopServices::openUrl(QUrl("http://www.x264.com/"));
|
if(QObject::sender() == ui->actionWebX264) QDesktopServices::openUrl(QUrl("http://www.x264.com/"));
|
||||||
if(QObject::sender() == ui->actionWebKomisar) QDesktopServices::openUrl(QUrl("http://komisar.gin.by/"));
|
if(QObject::sender() == ui->actionWebKomisar) QDesktopServices::openUrl(QUrl("http://komisar.gin.by/"));
|
||||||
@ -675,12 +671,21 @@ void MainWindow::shutdownComputer(void)
|
|||||||
{
|
{
|
||||||
qDebug("shutdownComputer(void)");
|
qDebug("shutdownComputer(void)");
|
||||||
|
|
||||||
|
if((m_status != STATUS_IDLE) && (m_status != STATUS_EXITTING))
|
||||||
|
{
|
||||||
|
qWarning("Cannot shutdown computer at this time!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(countPendingJobs() > 0)
|
if(countPendingJobs() > 0)
|
||||||
{
|
{
|
||||||
qDebug("Still have pending jobs, won't shutdown yet!");
|
qDebug("Still have pending jobs, won't shutdown yet!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const x264_status_t previousStatus = m_status;
|
||||||
|
m_status = STATUS_BLOCKED;
|
||||||
|
|
||||||
const int iTimeout = 30;
|
const int iTimeout = 30;
|
||||||
const Qt::WindowFlags flags = Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowSystemMenuHint;
|
const Qt::WindowFlags flags = Qt::WindowStaysOnTopHint | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::MSWindowsFixedSizeDialogHint | Qt::WindowSystemMenuHint;
|
||||||
const QString text = QString("%1%2%1").arg(QString().fill(' ', 18), tr("Warning: Computer will shutdown in %1 seconds..."));
|
const QString text = QString("%1%2%1").arg(QString().fill(' ', 18), tr("Warning: Computer will shutdown in %1 seconds..."));
|
||||||
@ -717,6 +722,7 @@ void MainWindow::shutdownComputer(void)
|
|||||||
if(progressDialog.wasCanceled())
|
if(progressDialog.wasCanceled())
|
||||||
{
|
{
|
||||||
progressDialog.close();
|
progressDialog.close();
|
||||||
|
m_status = previousStatus;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
progressDialog.setValue(i+1);
|
progressDialog.setValue(i+1);
|
||||||
@ -727,11 +733,13 @@ void MainWindow::shutdownComputer(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
qWarning("Shutting down !!!");
|
qWarning("Shutting down !!!");
|
||||||
|
m_status = previousStatus;
|
||||||
|
|
||||||
if(x264_shutdown_computer("Simple x264 Launcher: All jobs completed, shutting down!", 10, true))
|
if(x264_shutdown_computer("Simple x264 Launcher: All jobs completed, shutting down!", 10, true))
|
||||||
{
|
{
|
||||||
qApp->closeAllWindows();
|
qApp->closeAllWindows();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1016,7 +1024,7 @@ void MainWindow::handleCommand(const int &command, const QStringList &args)
|
|||||||
if(m_status != STATUS_AWAITING)
|
if(m_status != STATUS_AWAITING)
|
||||||
{
|
{
|
||||||
m_status = STATUS_AWAITING;
|
m_status = STATUS_AWAITING;
|
||||||
QTimer::singleShot(3333, this, SLOT(handlePendingFiles()));
|
QTimer::singleShot(5000, this, SLOT(handlePendingFiles()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1154,6 +1162,7 @@ void MainWindow::closeEvent(QCloseEvent *e)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_status = STATUS_EXITTING;
|
||||||
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
|
qApp->processEvents(QEventLoop::ExcludeUserInputEvents);
|
||||||
QMainWindow::closeEvent(e);
|
QMainWindow::closeEvent(e);
|
||||||
}
|
}
|
||||||
@ -1507,12 +1516,9 @@ bool MainWindow::parseCommandLineArgs(void)
|
|||||||
bCommandAccepted = true;
|
bCommandAccepted = true;
|
||||||
if(args.size() >= 3)
|
if(args.size() >= 3)
|
||||||
{
|
{
|
||||||
QStringList lst;
|
const QStringList list = args.mid(0, 3);
|
||||||
for(int i = 0; i < 3; i++)
|
handleCommand(IPC::IPC_OPCODE_ADD_JOB, list);
|
||||||
{
|
args.erase(args.begin(), args.begin() + 3);
|
||||||
lst << args.takeFirst();
|
|
||||||
}
|
|
||||||
handleCommand(IPC::IPC_OPCODE_ADD_JOB, lst);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user