This should fix the endless dispatcher loop which throttled CPU usage to 100%. Signed-off-by: Mavridis Philippe <mavridisf@gmail.com>feat/dispatcher-thread
parent
39160735ce
commit
a74979eff7
@ -0,0 +1,64 @@
|
||||
/* qdbusdispatcher.cpp TQT_DBusDispatcher private implementation
|
||||
*
|
||||
* Copyright (C) 2024 Mavridis Philippe <mavridisf@gmail.com>
|
||||
*
|
||||
* Licensed under the Academic Free License version 2.1
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <tqmutex.h>
|
||||
|
||||
#include "tqdbusconnection_p.h"
|
||||
#include "tqdbusdispatcher_p.h"
|
||||
#include "tqdbusdispatcher_p.moc"
|
||||
|
||||
TQT_DBusDispatcher::TQT_DBusDispatcher(TQT_DBusConnectionPrivate *connection)
|
||||
: TQObject(), m_connection(connection), m_busy(new TQMutex()), m_dispatch(false)
|
||||
{
|
||||
}
|
||||
|
||||
TQT_DBusDispatcher::~TQT_DBusDispatcher()
|
||||
{
|
||||
}
|
||||
|
||||
void TQT_DBusDispatcher::run()
|
||||
{
|
||||
m_dispatch = true;
|
||||
while (m_dispatch)
|
||||
{
|
||||
usleep(50);
|
||||
dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
void TQT_DBusDispatcher::dispatch()
|
||||
{
|
||||
TQMutexLocker locker(m_busy);
|
||||
|
||||
if (m_connection->mode == TQT_DBusConnectionPrivate::ClientMode)
|
||||
{
|
||||
if (dbus_connection_dispatch(m_connection->connection) != DBUS_DISPATCH_DATA_REMAINS)
|
||||
{
|
||||
if (running())
|
||||
{
|
||||
m_dispatch = false;
|
||||
exit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
/* qdbusdispatcher_p.h TQT_DBusDispatcher private object
|
||||
*
|
||||
* Copyright (C) 2024 Mavridis Philippe <mavridisf@gmail.com>
|
||||
*
|
||||
* Licensed under the Academic Free License version 2.1
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*/
|
||||
|
||||
//
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the public API. This header file may
|
||||
// change from version to version without notice, or even be
|
||||
// removed.
|
||||
//
|
||||
// We mean it.
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
#ifndef TQDBUSDISPATCHER_P_H
|
||||
#define TQDBUSDISPATCHER_P_H
|
||||
|
||||
#include <tqthread.h>
|
||||
|
||||
class TQT_DBusConnectionPrivate;
|
||||
class TQMutex;
|
||||
|
||||
class TQT_DBusDispatcher : public TQObject, public TQThread
|
||||
{
|
||||
TQ_OBJECT
|
||||
|
||||
public:
|
||||
TQT_DBusDispatcher(TQT_DBusConnectionPrivate *connection);
|
||||
~TQT_DBusDispatcher();
|
||||
void run();
|
||||
|
||||
public slots:
|
||||
void dispatch();
|
||||
|
||||
private:
|
||||
TQT_DBusConnectionPrivate *m_connection;
|
||||
TQMutex *m_busy;
|
||||
bool m_dispatch;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in new issue