Jelajahi Sumber

refactor & fix: 修复core-logger的错误

SongZihuan 3 tahun lalu
induk
melakukan
5cc4399493

+ 1 - 1
include/core/core-logger.h

@@ -10,4 +10,4 @@ namespace aFuncore {
 
 #include "core-logger.inline.h"
 
-#endif //AFUN_CORE_LOGGER_H
+#endif //AFUN_TOOL_LOGGER_H

+ 1 - 1
include/interface/init.inline.h

@@ -10,7 +10,7 @@ namespace aFunit {
                                aFuntool::Logger &code_logger_,
                                aFuntool::Logger &sys_logger_)
         : factor{factor_}, core_logger{core_logger_}, code_logger{code_logger_}, sys_logger{sys_logger_}, afun_logger{afun_logger_} {
-
+        aFuntool::aFunAtExit(aFuntool::DlcHandle::dlcExit);
     }
 
     void setAFunLogger(aFuntool::Logger *log) {

+ 4 - 2
include/tool/tool-exit.h

@@ -11,14 +11,16 @@ namespace aFuntool {
 #endif
 
     typedef std::function<void(void *)> aFunExitFunc;
+    typedef std::function<void()> ExitFunc;
 
     AFUN_TOOL_EXPORT void aFunExit(int exit_code) noexcept(false);
     [[noreturn]] AFUN_TOOL_EXPORT void aFunExitReal(int exit_code);
     AFUN_TOOL_EXPORT bool aFunTryExitPseudo();
     AFUN_TOOL_EXPORT void aFunExitPseudo();
 
-    AFUN_TOOL_EXPORT bool aFunAtExitTry(aFunExitFunc func, void *data);
-    AFUN_TOOL_EXPORT void aFunAtExit(aFunExitFunc func, void *data);
+    AFUN_TOOL_EXPORT bool aFunAtExitTry(const aFunExitFunc &func, void *data);
+    AFUN_TOOL_EXPORT void aFunAtExit(const aFunExitFunc &func, void *data);
+    AFUN_TOOL_EXPORT void aFunAtExit(const ExitFunc& func);
 
 #ifndef AFUN_TOOL_C
 }

+ 14 - 4
src/tool/exit.cpp

@@ -100,8 +100,8 @@ namespace aFuntool {
      * @param func 退出函数
      * @param data 参数
      */
-    bool aFunAtExitTry(aFunExitFunc func, void *data){
-        return manager.tryPushExitData(std::move(func), data);
+    bool aFunAtExitTry(const aFunExitFunc &func, void *data){
+        return manager.tryPushExitData(func, data);
     }
 
     /**
@@ -110,8 +110,18 @@ namespace aFuntool {
      * @param data 参数
      * @return
      */
-    void aFunAtExit(aFunExitFunc func, void *data){
-        manager.pushExitData(std::move(func), data);
+    void aFunAtExit(const aFunExitFunc &func, void *data){
+        manager.pushExitData(func, data);
+    }
+
+    /**
+     * 注册退出函数, aFun退出函数会在atexit退出函数之前执行
+     * @param func 退出函数
+     * @param data 参数
+     * @return
+     */
+    void aFunAtExit(const ExitFunc &func){
+        manager.pushExitData([func] (void *) {func();}, nullptr);
     }
 
 #ifndef AFUN_TOOL_C