玉兔远程控制
0.1.0-bate11
Toggle main menu visibility
载入中...
搜索中...
未找到
Src
PluginBackendThread.cpp
1
// Author: Kang Lin <kl222@126.com>
2
3
#include <QLoggingCategory>
4
#include <QMetaMethod>
5
#include "PluginThread.h"
6
#include "PluginBackendThread.h"
7
8
static
Q_LOGGING_CATEGORY(log,
"Plugin.Backend.Thread"
)
9
CPluginBackendThread
::
CPluginBackendThread
(QObject *parent)
10
:
CPlugin
{parent}
11
, m_pThread(
nullptr
)
12
{
13
m_pThread =
new
CPluginThread
();
// Note that the parent object pointer cannot be set here.
14
if
(m_pThread)
15
{
16
// The object is also deleted when the thread finishes executing.
17
bool
check = connect(m_pThread, SIGNAL(finished()),
18
m_pThread, SLOT(deleteLater()));
19
Q_ASSERT(check);
20
m_pThread->start();
21
}
22
}
23
24
CPluginBackendThread::~CPluginBackendThread()
25
{
26
qDebug(log) << Q_FUNC_INFO;
27
if
(m_pThread)
28
m_pThread->quit();
// The don't deleteLater().
29
// because of it is connected finished signal
30
}
31
36
COperate
*
CPluginBackendThread::CreateOperate
(
const
QString &szId,
CParameterPlugin
*para)
37
{
38
auto
* pOperate =
CPlugin::CreateOperate
(szId, para);
39
if
(!pOperate)
return
nullptr
;
40
QString szMsg;
41
szMsg =
"Please generate plugin from template using the script `./Script/create_plugin.sh --template=QtEvent`. or "
;
42
szMsg += QString(pOperate->metaObject()->className());
43
szMsg +=
" include `sigNewBackend(COperate*)`, `sigDeleteBackend(COperate*)` and `Q_INVOKABLE virtual CBackend* InstanceBackend()`"
;
44
/*
45
const QMetaObject* metaObject = pOperate->metaObject();
46
QStringList methods;
47
for(int i = 0; i < metaObject->methodCount(); ++i)
48
methods << QString::fromLatin1(metaObject->method(i).methodSignature());
49
qDebug(log) << methods;
50
//*/
51
if
(-1 == pOperate->metaObject()->indexOfMethod(
"InstanceBackend()"
)) {
52
QString szErr;
53
szErr =
"The class "
+ QString(pOperate->metaObject()->className())
54
+
" has not method InstanceBackend(). "
55
"Please add 'Q_INVOKABLE virtual CBackend* InstanceBackend()' to "
56
+ QString(pOperate->metaObject()->className());
57
szErr +=
". "
+ szMsg;
58
qCritical(log) << szErr;
59
Q_ASSERT_X(
false
,
"CPluginBackendThread"
, szErr.toStdString().c_str());
60
}
61
if
(-1 == pOperate->metaObject()->indexOfMethod(
"sigNewBackend(COperate*)"
)) {
62
QString szErr;
63
szErr =
"The class "
+ QString(pOperate->metaObject()->className())
64
+
" has not signal sigNewBackend(). "
65
"Please add 'void sigNewBackend();' to "
66
+ QString(pOperate->metaObject()->className());
67
szErr +=
". "
+ szMsg;
68
qCritical(log) << szErr;
69
Q_ASSERT_X(
false
,
"CPluginBackendThread"
, szErr.toStdString().c_str());
70
}
71
if
(-1 == pOperate->metaObject()->indexOfMethod(
"sigDeleteBackend(COperate*)"
)) {
72
QString szErr;
73
szErr =
"The class "
+ QString(pOperate->metaObject()->className())
74
+
" has not signal sigDeleteBackend(). "
75
"Please add 'void sigDeleteBackend();' to "
76
+ QString(pOperate->metaObject()->className());
77
szErr +=
". "
+ szMsg;
78
qCritical(log) << szErr;
79
Q_ASSERT_X(
false
,
"CPluginBackendThread"
, szErr.toStdString().c_str());
80
}
81
82
Q_ASSERT(m_pThread);
83
84
bool
check = connect(pOperate, SIGNAL(sigNewBackend(
COperate
*)),
85
m_pThread, SIGNAL(sigNewBackend(
COperate
*)));
86
Q_ASSERT(check);
87
check = connect(pOperate, SIGNAL(sigDeleteBackend(
COperate
*)),
88
m_pThread, SIGNAL(sigDeleteBackend(
COperate
*)));
89
Q_ASSERT(check);
90
91
return
pOperate;
92
}
COperate
操作接口。
定义
Operate.h:51
CParameterPlugin
插件的全局参数。
定义
ParameterPlugin.h:36
CPluginBackendThread
插件有一个后台线程,所有操作后端运行在此后台线程中
定义
PluginBackendThread.h:17
CPluginBackendThread::CreateOperate
virtual COperate * CreateOperate(const QString &szId, CParameterPlugin *para) override
Create operate and connect signals to CPluginThread
定义
PluginBackendThread.cpp:36
CPluginThread
一个线程处理多个操作 COperate 。 此类仅用于 CPluginBackendThread 由插件使用。
定义
PluginThread.h:20
CPlugin
插件接口
定义
Plugin.h:15
CPlugin::CreateOperate
virtual Q_INVOKABLE COperate * CreateOperate(const QString &szId, CParameterPlugin *para)
新建 COperate 实例。仅由 CManager 调用
定义
Plugin.cpp:82
作者:康林 (kl222@126.com)
版权所有(c) 康林工作室 保留所有权力