# MsgHandlerForC **Repository Path**: agrui/MsgHandlerForC ## Basic Information - **Project Name**: MsgHandlerForC - **Description**: Message-Handler机制是Android Framework中使用较为普遍的异步处理机制,MsgHandlerForC项目实现了一套C语言版本的Message-Handler,可以移植到各种嵌入性操作系统上面,以便那些不支持Java或者C++语言的系统。 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 6 - **Created**: 2020-03-13 - **Last Updated**: 2025-08-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MsgHandlerForC #### 介绍 Message-Handler机制是Android Framework中使用较为普遍的异步处理机制,MsgHandlerForC项目实行了一套C语言版本的Message-Handler,可以移植到各种嵌入性操作系统上面,以便那些不支持Java或者C++语言的系统。 ### 编译 需要在linux环境环境下编译,下载源代码,切换到源代码根目录,执行make命令,编译出的静态库libs/libmsghandler.a,你可以写一个可执行程序,link这个库。 ### 使用说明 一个简单的案例,参考test/MessageTest.cpp ``` #include "gtest/gtest.h" #include "MessageHandler.h" #include #define EVENT_TEST_MSG 1 static void testHandlerMessage(Message* msg) { switch(msg->what) { case EVENT_TEST_MSG: { ASSERT_FALSE(TRUE); Handler* handler = (Handler*)msg->userObj; quit(handler->mQueue); break; } default: ASSERT_FALSE(FALSE); break; } } TEST(MessageTest, HandleMessageTest) { Looper* looper; looper = prepare(TRUE); Handler* handler = newHandler(testHandlerMessage); std::thread thread = std::thread([handler, this]() { Message* msg = handlerObtainMessage(handler, EVENT_TEST_MSG, NULL); msg->userObj = handler; messageSendToTarget(msg); }); loop(); thread.join(); } ``` 编译测试程序命令 ``` make cd test scons ``` 测试用例编译完成后,生成test可执行 ./test ``` [==========] Running 15 tests from 4 test suites. [----------] Global test environment set-up. [----------] 4 tests from BundleTest [ RUN ] BundleTest.BooleanTest [ OK ] BundleTest.BooleanTest (0 ms) [ RUN ] BundleTest.IntTest [ OK ] BundleTest.IntTest (0 ms) [ RUN ] BundleTest.StringTest [ OK ] BundleTest.StringTest (0 ms) [ RUN ] BundleTest.ObjectTest [ OK ] BundleTest.ObjectTest (0 ms) [----------] 4 tests from BundleTest (0 ms total) [----------] 5 tests from ArrayListTest [ RUN ] ArrayListTest.arrayListAddTest [ OK ] ArrayListTest.arrayListAddTest (0 ms) [ RUN ] ArrayListTest.arrayListSizeTest [ OK ] ArrayListTest.arrayListSizeTest (0 ms) [ RUN ] ArrayListTest.arrayListAddKeyDataTest [ OK ] ArrayListTest.arrayListAddKeyDataTest (0 ms) [ RUN ] ArrayListTest.arrayListEnumTest [ OK ] ArrayListTest.arrayListEnumTest (0 ms) [ RUN ] ArrayListTest.arrayListClearTest [ OK ] ArrayListTest.arrayListClearTest (0 ms) [----------] 5 tests from ArrayListTest (0 ms total) [----------] 1 test from MessageTest [ RUN ] MessageTest.HandleMessageTest [ OK ] MessageTest.HandleMessageTest (0 ms) [----------] 1 test from MessageTest (0 ms total) [----------] 5 tests from PolicyServiceTest [ RUN ] PolicyServiceTest.PolicyTestAction1 [ OK ] PolicyServiceTest.PolicyTestAction1 (600 ms) [ RUN ] PolicyServiceTest.PolicyTestAction2 [ OK ] PolicyServiceTest.PolicyTestAction2 (400 ms) [ RUN ] PolicyServiceTest.PolicyTestAction3 [ OK ] PolicyServiceTest.PolicyTestAction3 (400 ms) [ RUN ] PolicyServiceTest.PolicyTestAction4 [ OK ] PolicyServiceTest.PolicyTestAction4 (600 ms) [ RUN ] PolicyServiceTest.PolicyTestAction5 [ OK ] PolicyServiceTest.PolicyTestAction5 (400 ms) [----------] 5 tests from PolicyServiceTest (2401 ms total) [----------] Global test environment tear-down [==========] 15 tests from 4 test suites ran. (2401 ms total) [ PASSED ] 15 tests. ```