소스 검색

修复TIMER

NH 1 년 전
부모
커밋
7923bf0869
2개의 변경된 파일16개의 추가작업 그리고 54개의 파일을 삭제
  1. 15 49
      src/module/timer.cpp
  2. 1 5
      src/module/timer.h

+ 15 - 49
src/module/timer.cpp

@@ -27,7 +27,7 @@ module::timer::~timer()
     ::ithread::stop();
     ::ithread::wait();
 }
-std::string module::timer::add(const std::string& name, const std::string& filepath, const std::string& funname, int msec, bool loop, sol::this_state ts)
+std::string module::timer::add(const std::string& name, const std::string& filepath,int msec, sol::this_state ts)
 {
     GET_APP;
     std::string filepath2;
@@ -48,9 +48,7 @@ std::string module::timer::add(const std::string& name, const std::string& filep
 
     timer_info ti;
     ti.name = name;
-    ti.funname = funname;
     ti.filepath = filepath2;
-    ti.loop = loop;
     ti.msec = msec;
     ti.exec_msec = time::now_msec() + msec;
 
@@ -106,33 +104,19 @@ bool module::timer::run()
     };
     auto exec_func = [&](timer_info& ti)->bool {
         std::string exception_string;
+        auto lua = m_app->state->get();
         try
         {
-            // 加载LUA文件
-            if (ti.lua == nullptr)
+            auto lbResult = lua->state->load_file(ti.filepath);
+            if (lbResult.valid() == false)
             {
-                ti.lua = m_app->state->get();
-                auto lbResult = ti.lua->state->load_file(ti.filepath);
-                if (lbResult.valid() == false)
-                {
-                    sol::error err = lbResult;
-                    throw ylib::exception("Failed to load script, " + std::string(err.what()));
-                }
-                lbResult();
+                sol::error err = lbResult;
+                throw ylib::exception("Failed to load script, " + std::string(err.what()));
             }
-            // 加载函数
-            if (ti.funname != "" && ti.function.valid() == false)
-                ti.function = (*ti.lua->state)[ti.funname];
-            // 执行函数
-            if (ti.function.valid())
-            {
-                auto result = ti.function();
-                if (!result.valid()) {
-                    sol::error err = result;
-                    throw ylib::exception(err.what());
-                }
-                bool rd = result;
-                return rd;
+            sol::protected_function_result result = lbResult();
+            if (!result.valid()) {
+                sol::error err = result;
+                throw ylib::exception(err.what());
             }
         }
         catch (const std::exception& e)
@@ -142,6 +126,8 @@ bool module::timer::run()
                 m_app->log->error("[timer][" + ti.filepath + "]: " + e.what(), __FILE__, __func__, __LINE__);
             return false;
         }
+        lua->state->collect_garbage();
+        m_app->state->push(lua);
         return false;
     };
     // 获取等待时间
@@ -156,40 +142,20 @@ bool module::timer::run()
 
     std::unique_lock<std::mutex> uni(m_mutex);
     auto now_msec = time::now_msec();
-    for (auto iter = m_list.begin(); iter != m_list.end();)
+    for (auto iter = m_list.begin(); iter != m_list.end();iter++)
     {
         if (iter->second.exec_msec <= now_msec)
         {
-            bool ready_remove = false;
-            if (exec_func(iter->second) == false)
-                ready_remove = true;
-            if (ready_remove == false)
-            {
-                if (iter->second.loop == false)
-                    ready_remove = true;
-                else
-                {
-                    iter->second.exec_msec = now_msec + iter->second.msec;
-                }
-            }
-            if (ready_remove)
-                iter = m_list.erase(iter);
-            else
-                iter++;
+            exec_func(iter->second);
+            iter->second.exec_msec = now_msec + iter->second.msec;
         }
-        else
-            iter++;
     }
     std::string name;
     while (m_removed.pop(name))
     {
         auto iter = m_list.find(name);
         if (iter != m_list.end())
-        {
-            iter->second.lua->state->collect_garbage();
-            m_app->state->push(iter->second.lua);
             m_list.erase(iter);
-        }
     }
         
 

+ 1 - 5
src/module/timer.h

@@ -11,11 +11,8 @@ namespace module
 	struct timer_info {
 		std::string filepath;
 		std::string name;
-		std::string funname;
-		bool loop = false;
 		timestamp exec_msec = 0;
 		timestamp msec = 0;
-		luastate* lua = nullptr;
 		sol::function function;
 	};
 	/// <summary>
@@ -30,11 +27,10 @@ namespace module
 		/// </summary>
 		/// <param name="name"></param>
 		/// <param name="filepath"></param>
-		/// <param name="funname"></param>
 		/// <param name="msec"></param>
 		/// <param name="loop"></param>
 		/// <returns></returns>
-		std::string add(const std::string& name,const std::string& filepath,const std::string& funname,int msec,bool loop, sol::this_state ts);
+		std::string add(const std::string& name,const std::string& filepath,int msec, sol::this_state ts);
 		/// <summary>
 		/// 移除
 		/// </summary>