FCT
载入中...
搜索中...
未找到
Android_UICommon.cpp
浏览该文件的文档.
1
//
2
// Created by Administrator on 2025/3/10.
3
//
4
#include "
../FCTAPI.h
"
5
#include "
Android_UICommon.h
"
6
7
namespace
FCT
{
8
void
Android_UICommon::preinit
() {
9
m_uiLooper
= ALooper_forThread();
10
ALooper_acquire(
m_uiLooper
);
11
if
(pipe(
m_messagePipe
) == -1) {
12
ferr
<<
"没有成功创建ui task的pipe"
<< std::endl;
13
}
14
15
ALooper_addFd(
m_uiLooper
,
m_messagePipe
[0],ALOOPER_POLL_CALLBACK,
16
ALOOPER_EVENT_INPUT,
looperWork
,
this
);
17
}
18
19
void
Android_UICommon::cleanup
() {
20
ALooper_removeFd(
m_uiLooper
,
m_messagePipe
[0]);
21
close(
m_messagePipe
[0]);
22
close(
m_messagePipe
[1]);
23
ALooper_release(
m_uiLooper
);
24
}
25
26
void
Android_UICommon::processUiTask
(
int
fd) {
27
UiTaskData
* wrapper;
28
ssize_t size = read(fd, &wrapper,
sizeof
(
UiTaskData
*));
29
if
(size ==
sizeof
(
UiTaskData
*) && wrapper) {
30
if
(wrapper->
task
) {
31
wrapper->
task
(wrapper->
param
);
32
}
33
if
(wrapper->
waiting
) {
34
*wrapper->
waiting
=
false
;
35
}
36
delete
wrapper;
37
}
38
}
39
40
void
Android_UICommon::postUiTask
(
UITaskFunction
task,
void
*param,
bool
waited) {
41
UiTaskData
* data =
new
UiTaskData
();
42
std::shared_ptr<bool> waiting = std::make_shared<bool>(waited);
43
data->
task
= std::move(task);
44
data->
waiting
= waiting;
45
data->
param
= param;
46
/*todo*/
47
write(
m_messagePipe
[1], &data,
sizeof
(
UiTaskData
*));
48
49
while
(*waiting) {
50
std::this_thread::sleep_for(std::chrono::milliseconds(1));
51
}
52
fout
<<
"结束"
<< std::endl;
53
}
54
55
int
Android_UICommon::looperWork
(
int
fd,
int
events,
void
*data) {
56
Android_UICommon
* common =
static_cast<
Android_UICommon
*
>
(data);
57
common->
processUiTask
(fd);
58
return
1;
59
}
60
}
61
Android_UICommon.h
FCTAPI.h
FCT::Android_UICommon
定义
Android_UICommon.h:18
FCT::Android_UICommon::m_uiLooper
ALooper * m_uiLooper
定义
Android_UICommon.h:26
FCT::Android_UICommon::m_messagePipe
int m_messagePipe[2]
定义
Android_UICommon.h:27
FCT::Android_UICommon::processUiTask
void processUiTask(int fd)
定义
Android_UICommon.cpp:26
FCT::Android_UICommon::preinit
void preinit()
定义
Android_UICommon.cpp:8
FCT::Android_UICommon::cleanup
void cleanup()
定义
Android_UICommon.cpp:19
FCT::Android_UICommon::looperWork
static int looperWork(int fd, int events, void *data)
定义
Android_UICommon.cpp:55
FCT::Android_UICommon::postUiTask
void postUiTask(UITaskFunction task, void *param=nullptr, bool waited=true)
定义
Android_UICommon.cpp:40
FCT
定义
Enums.h:8
FCT::UITaskFunction
std::function< void(void *)> UITaskFunction
定义
Android_UICommon.h:10
FCT::ferr
std::ostream & ferr
定义
OutStream.cpp:9
FCT::fout
std::ostream & fout
定义
OutStream.cpp:8
FCT::UiTaskData
定义
Android_UICommon.h:12
FCT::UiTaskData::waiting
std::shared_ptr< bool > waiting
定义
Android_UICommon.h:15
FCT::UiTaskData::task
UITaskFunction task
定义
Android_UICommon.h:13
FCT::UiTaskData::param
void * param
定义
Android_UICommon.h:14
src
UI
Android_UICommon.cpp
制作者
1.14.0