Browse Source

refactor & feat: exit使用std::function包装

SongZihuan 3 years ago
parent
commit
d61f89e724
2 changed files with 14 additions and 12 deletions
  1. 4 3
      include/tool/tool-exit.h
  2. 10 9
      src/tool/exit.cpp

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

@@ -1,16 +1,17 @@
 #ifndef AFUN_EXIT_H
 #define AFUN_EXIT_H
+#include <functional>
 #include "aFunToolExport.h"
 
 namespace aFuntool {
-    typedef void aFunExitFunc(void *);
+    typedef std::function<void(void *)> aFunExitFunc;
 
     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(aFunExitFunc func, void *data);
+    AFUN_TOOL_EXPORT void aFunAtExit(aFunExitFunc func, void *data);
 }
 
 #endif //AFUN_EXIT_H

+ 10 - 9
src/tool/exit.cpp

@@ -1,5 +1,6 @@
 #include <mutex>
 #include <stack>
+#include <utility>
 #include "tool-exit.h"
 #include "tool-exception.h"
 
@@ -24,9 +25,9 @@ namespace aFuntool {
             }
         }
 
-        void pushExitData(aFunExitFunc *func, void *data_) {
+        void pushExitData(aFunExitFunc func, void *data_) {
             std::unique_lock<std::mutex> ul{exit_mutex};
-            data.push({func, data_});
+            data.push({std::move(func), data_});
         }
 
         bool tryRunExitData() {
@@ -41,18 +42,18 @@ namespace aFuntool {
             return true;
         }
 
-        bool tryPushExitData(aFunExitFunc *func, void *data_) {
+        bool tryPushExitData(aFunExitFunc func, void *data_) {
             if (!exit_mutex.try_lock())
                 return false;
             std::unique_lock<std::mutex> ul{exit_mutex, std::adopt_lock};
-            data.push({func, data_});
+            data.push({std::move(func), data_});
             return true;
         }
 
     private:
         std::mutex exit_mutex;
         struct ExitFuncData {
-            aFunExitFunc *func;
+            aFunExitFunc func;
             void *data;
         };
         std::stack<ExitFuncData> data;
@@ -95,8 +96,8 @@ namespace aFuntool {
      * @param func 退出函数
      * @param data 参数
      */
-    bool aFunAtExitTry(aFunExitFunc *func, void *data){
-        return manager.tryPushExitData(func, data);
+    bool aFunAtExitTry(aFunExitFunc func, void *data){
+        return manager.tryPushExitData(std::move(func), data);
     }
 
     /**
@@ -105,7 +106,7 @@ namespace aFuntool {
      * @param data 参数
      * @return
      */
-    void aFunAtExit(aFunExitFunc *func, void *data){
-        manager.pushExitData(func, data);
+    void aFunAtExit(aFunExitFunc func, void *data){
+        manager.pushExitData(std::move(func), data);
     }
 }