FCT
载入中...
搜索中...
未找到
Android_UICommon.cpp
浏览该文件的文档.
1//
2// Created by Administrator on 2025/3/10.
3//
4#include "../FCTAPI.h"
5#include "Android_UICommon.h"
6
7namespace FCT {
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
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
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
static int looperWork(int fd, int events, void *data)
void postUiTask(UITaskFunction task, void *param=nullptr, bool waited=true)
std::function< void(void *)> UITaskFunction
std::ostream & ferr
std::ostream & fout
std::shared_ptr< bool > waiting