Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
colorEagleStdio
qtcpp_demo
提交
0bfb505a
qtcpp_demo
项目概览
colorEagleStdio
/
qtcpp_demo
通知
465
Star
24
Fork
12
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
qtcpp_demo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0bfb505a
编写于
10月 23, 2023
作者:
丁劲犇
😸
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
加入直接调用测试
上级
e3772c4c
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
94 addition
and
27 deletion
+94
-27
qt_event_signal/main.cpp
qt_event_signal/main.cpp
+16
-5
qt_event_signal/testevent.cpp
qt_event_signal/testevent.cpp
+6
-6
qt_event_signal/testevent.h
qt_event_signal/testevent.h
+13
-4
qt_event_signal/testobj.cpp
qt_event_signal/testobj.cpp
+52
-12
qt_event_signal/testobj.h
qt_event_signal/testobj.h
+7
-0
未找到文件。
qt_event_signal/main.cpp
浏览文件 @
0bfb505a
...
...
@@ -82,32 +82,43 @@ int main(int argc, char *argv[])
thread2
->
start
();
printf
(
"Test signals and slots...
\n
"
);
QCoreApplication
::
processEvents
();
a
.
connect
(
obj1
,
&
TestObj
::
sig_finished
,[
=
]()
->
void
{
printf
(
"Test Events...
\n
"
);
QThread
::
msleep
(
1000
);
QCoreApplication
::
postEvent
(
obj1
,
new
QEvent
(
Test
Event
::
startEvt
()));
QCoreApplication
::
postEvent
(
obj1
,
new
QEvent
(
Test
Msg
::
startEvt
()));
});
a
.
connect
(
obj1
,
&
TestObj
::
evt_finished
,[
=
]()
->
void
{
QThread
::
msleep
(
1000
);
QCoreApplication
::
postEvent
(
obj1
,
new
QEvent
(
Test
Event
::
quitEvt
()));
QCoreApplication
::
postEvent
(
obj2
,
new
QEvent
(
Test
Event
::
quitEvt
()));
QCoreApplication
::
postEvent
(
obj1
,
new
QEvent
(
Test
Msg
::
quitEvt
()));
QCoreApplication
::
postEvent
(
obj2
,
new
QEvent
(
Test
Msg
::
quitEvt
()));
});
QThread
::
msleep
(
1000
);
QCoreApplication
::
processEvents
();
QCoreApplication
::
postEvent
(
obj1
,
new
QEvent
(
TestEvent
::
startSig
()));
QCoreApplication
::
postEvent
(
obj1
,
new
QEvent
(
TestMsg
::
startSig
()));
a
.
processEvents
();
thread1
->
wait
();
thread2
->
wait
();
QThread
::
msleep
(
1000
);
obj1
->
runDirectCall
();
printf
(
"Finished.
\n
"
);
thread1
->
deleteLater
();
thread2
->
deleteLater
();
obj1
->
deleteLater
();
obj2
->
deleteLater
();
QThread
::
msleep
(
1000
);
QCoreApplication
::
processEvents
();
return
0
;
}
qt_event_signal/testevent.cpp
浏览文件 @
0bfb505a
#include "testevent.h"
#include <QDebug>
//Regisit a event
QEvent
::
Type
Test
Event
::
m_testEvt
=
(
QEvent
::
Type
)
QEvent
::
registerEventType
();
QEvent
::
Type
Test
Event
::
m_startEvt
=
(
QEvent
::
Type
)
QEvent
::
registerEventType
();
QEvent
::
Type
Test
Event
::
m_startSig
=
(
QEvent
::
Type
)
QEvent
::
registerEventType
();
QEvent
::
Type
Test
Event
::
m_quit
=
(
QEvent
::
Type
)
QEvent
::
registerEventType
();
QEvent
::
Type
Test
Msg
::
m_testEvt
=
(
QEvent
::
Type
)
QEvent
::
registerEventType
();
QEvent
::
Type
Test
Msg
::
m_startEvt
=
(
QEvent
::
Type
)
QEvent
::
registerEventType
();
QEvent
::
Type
Test
Msg
::
m_startSig
=
(
QEvent
::
Type
)
QEvent
::
registerEventType
();
QEvent
::
Type
Test
Msg
::
m_quit
=
(
QEvent
::
Type
)
QEvent
::
registerEventType
();
Test
Event
::
TestEvent
(
clock_t
clk
)
Test
Msg
::
TestMsg
(
clock_t
clk
)
:
QEvent
(
m_testEvt
)
,
m_clk
(
clk
)
{
}
Test
Event
::~
TestEvent
()
Test
Msg
::~
TestMsg
()
{
//qDebug()<<"Destory";
}
qt_event_signal/testevent.h
浏览文件 @
0bfb505a
...
...
@@ -3,7 +3,8 @@
#include <QEvent>
#include <time.h>
class
TestEvent
:
public
QEvent
#include <QString>
class
TestMsg
:
public
QEvent
{
private:
static
QEvent
::
Type
m_testEvt
;
...
...
@@ -11,15 +12,23 @@ private:
static
QEvent
::
Type
m_startSig
;
static
QEvent
::
Type
m_quit
;
clock_t
m_clk
=
0
;
QString
m_dummyLongStr
;
public:
Test
Event
(
clock_t
clk
);
~
Test
Event
();
Test
Msg
(
clock_t
clk
);
~
Test
Msg
();
inline
clock_t
clock
()
{
return
m_clk
;}
inline
void
fillStr
(
int
len
)
{
for
(
int
i
=
0
;
i
<
len
;
++
i
)
{
m_dummyLongStr
.
push_back
((
char
)(
i
*
37
%
64
+
32
));
}
}
public:
static
inline
QEvent
::
Type
type
()
{
return
m_testEvt
;}
static
inline
QEvent
::
Type
startEvt
()
{
return
m_startEvt
;}
static
inline
QEvent
::
Type
startSig
()
{
return
m_startSig
;}
static
inline
QEvent
::
Type
quitEvt
()
{
return
m_quit
;}
static
inline
QEvent
::
Type
quitEvt
()
{
return
m_quit
;}
};
#endif // TESTEVENT_H
qt_event_signal/testobj.cpp
浏览文件 @
0bfb505a
...
...
@@ -3,8 +3,8 @@
#include <QCoreApplication>
#include <QTextStream>
#include <QThread>
static
const
int
testCounts
=
10000
0
;
static
const
int
testCounts
=
10000
;
static
const
int
fillStrLen
=
1024
;
TestObj
::
TestObj
(
QObject
*
parent
)
:
QObject
{
parent
}
{
...
...
@@ -13,16 +13,17 @@ TestObj::TestObj(QObject *parent)
void
TestObj
::
customEvent
(
QEvent
*
evt
)
{
if
(
evt
->
type
()
==
Test
Event
::
type
())
if
(
evt
->
type
()
==
Test
Msg
::
type
())
{
clock_t
curr_clk
=
clock
();
if
(
m_nFirstClkEvt
==-
1
)
m_nFirstClkEvt
=
curr_clk
;
Test
Event
*
e
=
dynamic_cast
<
TestEvent
*>
(
evt
);
Test
Msg
*
e
=
dynamic_cast
<
TestMsg
*>
(
evt
);
if
(
e
)
{
clock_t
delay
=
curr_clk
-
e
->
clock
();
m_nDelay_Evts
+=
delay
;
e
->
fillStr
(
fillStrLen
);
++
m_nCount_Evts
;
}
if
(
m_nEmittedEvts
<=
testCounts
)
...
...
@@ -43,7 +44,7 @@ void TestObj::customEvent(QEvent * evt)
if
(
m_buddy
->
m_nCount_Evts
>
testCounts
&&
m_nCount_Evts
>
testCounts
)
emit
evt_finished
();
}
else
if
(
evt
->
type
()
==
Test
Event
::
startEvt
())
else
if
(
evt
->
type
()
==
Test
Msg
::
startEvt
())
{
m_nCount_Evts
=
0
;
m_nDelay_Evts
=
0
;
...
...
@@ -58,7 +59,7 @@ void TestObj::customEvent(QEvent * evt)
}
next_event
();
}
else
if
(
evt
->
type
()
==
Test
Event
::
startSig
())
else
if
(
evt
->
type
()
==
Test
Msg
::
startSig
())
{
m_nCount_Sigs
=
0
;
m_nDelay_Sigs
=
0
;
...
...
@@ -73,7 +74,7 @@ void TestObj::customEvent(QEvent * evt)
}
next_signal
();
}
else
if
(
evt
->
type
()
==
Test
Event
::
quitEvt
())
else
if
(
evt
->
type
()
==
Test
Msg
::
quitEvt
())
{
thread
()
->
quit
();
}
...
...
@@ -86,14 +87,13 @@ void TestObj::test_slot16(QEvent * evt)
if
(
m_nFirstClkSig
==-
1
)
m_nFirstClkSig
=
curr_clk
;
Test
Event
*
e
=
dynamic_cast
<
TestEvent
*>
(
evt
);
Test
Msg
*
e
=
dynamic_cast
<
TestMsg
*>
(
evt
);
if
(
e
)
{
clock_t
delay
=
curr_clk
-
e
->
clock
();
m_nDelay_Evts
+=
delay
;
++
m_nCount_Evts
;
m_nDelay_Sigs
+=
delay
;
++
m_nCount_Sigs
;
e
->
fillStr
(
fillStrLen
);
if
(
m_nEmittedSigs
<=
testCounts
)
next_signal
();
if
(
m_nCount_Sigs
==
testCounts
)
...
...
@@ -116,7 +116,7 @@ void TestObj::test_slot16(QEvent * evt)
void
TestObj
::
next_signal
()
{
emit
test_sig16
(
new
Test
Event
(
clock
()));
emit
test_sig16
(
new
Test
Msg
(
clock
()));
++
m_nEmittedSigs
;
}
void
TestObj
::
next_event
()
...
...
@@ -124,5 +124,45 @@ void TestObj::next_event()
if
(
!
m_buddy
)
return
;
++
m_nEmittedEvts
;
QCoreApplication
::
postEvent
(
m_buddy
,
new
TestEvent
(
clock
()));
QCoreApplication
::
postEvent
(
m_buddy
,
new
TestMsg
(
clock
()));
}
void
TestObj
::
runDirectCall
()
{
m_nCount_Dir
=
0
;
m_nDelay_Dir
=
0
;
m_nFirstClkDir
=
-
1
;
printf
(
"Test Direct Call...
\n
"
);
for
(
int
i
=
0
;
i
<
testCounts
;
++
i
)
{
direct_call
(
new
TestMsg
(
clock
()));
}
}
void
TestObj
::
direct_call
(
QEvent
*
evt
)
{
clock_t
curr_clk
=
clock
();
if
(
m_nFirstClkDir
==-
1
)
m_nFirstClkDir
=
curr_clk
;
TestMsg
*
e
=
dynamic_cast
<
TestMsg
*>
(
evt
);
if
(
e
)
{
clock_t
delay
=
curr_clk
-
e
->
clock
();
m_nDelay_Dir
+=
delay
;
++
m_nCount_Dir
;
e
->
fillStr
(
fillStrLen
);
if
(
m_nCount_Dir
==
testCounts
)
{
QTextStream
strm
(
stdout
);
strm
<<
objectName
()
<<
QString
().
asprintf
(
" (%llX) run %d Direct Calls, total costs %.2lf ms, AVG cost %.2lf us / test, AVG delay=%.2lf us.
\n
"
,(
unsigned
long
long
)
this
,(
int
)(
m_nCount_Dir
)
,
1e3
*
(
curr_clk
-
m_nFirstClkDir
)
/
CLOCKS_PER_SEC
,
1e6
*
(
curr_clk
-
m_nFirstClkDir
)
/
CLOCKS_PER_SEC
/
testCounts
,
1e6
*
m_nDelay_Dir
/
CLOCKS_PER_SEC
/
m_nCount_Dir
);
strm
.
flush
();
}
delete
e
;
}
}
qt_event_signal/testobj.h
浏览文件 @
0bfb505a
...
...
@@ -13,6 +13,7 @@ public:
m_buddy
=
buddy
;
buddy
->
m_buddy
=
this
;
}
void
runDirectCall
();
public
slots
:
void
test_slot1
(
QEvent
*
evt
){}
void
test_slot2
(
QEvent
*
evt
){}
...
...
@@ -80,6 +81,10 @@ private:
clock_t
m_nFirstClkEvt
=
-
1
;
quint32
m_nCount_Evts
=
0
;
clock_t
m_nDelay_Evts
=
0
;
clock_t
m_nFirstClkDir
=
-
1
;
quint32
m_nCount_Dir
=
0
;
clock_t
m_nDelay_Dir
=
0
;
private:
quint32
m_nEmittedSigs
=
0
;
quint32
m_nEmittedEvts
=
0
;
...
...
@@ -87,6 +92,8 @@ private:
private:
void
next_signal
();
void
next_event
();
private:
void
direct_call
(
QEvent
*
evt
);
};
#endif // TESTOBJ_H
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录