Browse Source

1、供电告警
2、主线程定时处理切换到另一线程

zzj 5 years ago
parent
commit
e0f0a493f6
4 changed files with 129 additions and 59 deletions
  1. 49 15
      net-service.cpp
  2. 60 43
      worker.cpp
  3. 19 0
      worker.h
  4. 1 1
      znet.cpp

+ 49 - 15
net-service.cpp

@@ -18,9 +18,49 @@
 #include "card.h"
 #include "mine_business.h"
 #include "crc.h"
+#include "clock.h"
+
+struct timer_worker_thread: loop_thread
+{
+	void do_task_0001()
+	{
+		static int version = -1;
+		visit_site_status vss;
+		sit_list::instance()->accept(vss);
+		int v = card_list::instance()->version();
+		card_list_visit clv;
+		if(v != version)
+		{
+			version=v;
+			clv._flag=true;
+			mine_business::inst()->clear_vehicle();
+		}
+		card_list::instance()->accept(clv);
+		mine_business::inst()->run_business();
+	}
+
+	void do_task(task&t)
+	{
+		zclock clock;
+		switch(t.m_cmd_code)
+		{
+			case 0x0001:
+			{
+				do_task_0001();
+				break;
+			}
+		}
+
+		t.destroy();
+		log_info("task=%d,use time:%ldus",t.m_cmd_code, clock.count_us());
+	}
+};
+
+std::unique_ptr<timer_worker_thread> m_timer_worker;
 
 net_service::net_service()
 {
+	m_timer_worker.reset(new timer_worker_thread());
 	m_loc_worker=worker::instance();
 	m_sync_worker=tdoa_sync::instance();
 }
@@ -29,24 +69,18 @@ net_service::~net_service()
 {
 	if(m_loc_worker)
 		m_loc_worker->stop();
+	
+	m_timer_worker->stop();
 }
 
 void net_service::on_timer()
 {
-	static int version = -1;
-	visit_site_status vss;
-	sit_list::instance()->accept(vss);
-	int v = card_list::instance()->version();
-	card_list_visit clv;
-	if(v != version)
-	{
-        version=v;
-        clv._flag=true;
-        mine_business::inst()->clear_vehicle();
-	}
-	card_list::instance()->accept(clv);
-	mine_business::inst()->run_business();
+	task*t=task::alloc<task>();
+	t->m_cmd_code=1;
+	t->m_hash_id=0;
+	m_timer_worker->async_request(t);
 }
+
 void net_service::on_connect(const std::shared_ptr<client>& clt)
 {
      
@@ -91,8 +125,8 @@ void net_service::on_message(const std::shared_ptr<client> &clt,const char*data,
 					{
 						char timebuf[64]{0};
 						strftime(timebuf,64,"%F %T",&site_tm);
-						logn_info(1,"分站数据信息:%s net=%s,sid=%d,tm=%s,sct=%d",(power&1)==0?"true":"false",
-																	clt->name().c_str(),site_id,timebuf,site_ct);
+						logn_info(1,"分站数据信息:net=%s,sid=%d,tm=%s,sct=%d,power=%s", clt->name().c_str(), site_id,timebuf,
+										site_ct, site_ptr->m_power_check_enable?((power&1)?"ac":"dc"):"unkown");
 
 						time_t site_time=mktime(&site_tm);
 						double diff=difftime(site_time, site_ptr->last_site_time());

+ 60 - 43
worker.cpp

@@ -16,6 +16,60 @@
 #include "zloop.h"
 #include "area.h"
 
+loop_thread::loop_thread ()
+{
+	m_thread.reset(new std::thread(std::bind(&loop_thread::run,this)));
+}
+
+void loop_thread::run()
+{
+	loop_init();
+	log_info("worker_thread start....");
+	while(!check_stop_flag())
+	{
+		try
+		{
+			ev::dynamic_loop::run(0);
+		}
+		catch(const std::exception&e)
+		{
+			log_error("捕获到异常:%s",e.what());
+		}
+		catch(...)
+		{
+			log_error("捕获到未知异常");
+		}
+	}
+	log_info("worker_thread exit....");
+}
+
+void loop_thread::on_async(const std::list<task*>&task_list)
+{
+	for(task*t:task_list)
+	{
+		do_task(*t);
+	}
+}
+void loop_thread::loop_init()
+{
+
+}
+
+void loop_thread::join()
+{
+	m_thread->join();
+}
+
+void loop_thread::stop()
+{
+	async_stop();
+}
+
+loop_thread::~loop_thread()
+{
+}
+
+
 struct hash_thread
 {
 	int m_num_thread=4;
@@ -33,15 +87,13 @@ struct hash_thread
 
 hash_thread g_hash;
 
-struct worker_thread: zloop<task*> ,visitor<std::shared_ptr<card_location_base>>
+struct worker_thread: loop_thread ,visitor<std::shared_ptr<card_location_base>>
 {
-	std::unique_ptr<std::thread> m_thread;
 	int  m_thread_id=0;
 	int  m_card_list_version=-1;
 	std::vector<std::shared_ptr<card_location_base>> m_local_card_list;
 	worker_thread ()
 	{
-		m_thread.reset(new std::thread(std::bind(&worker_thread::run,this)));
 		m_local_card_list.reserve(128);
 	}
 
@@ -50,37 +102,12 @@ struct worker_thread: zloop<task*> ,visitor<std::shared_ptr<card_location_base>>
 		m_thread_id=id;
 	}
 
-	void run()
-	{
-		ev::timer card_timer_1s(*this);
-
-		card_timer_1s.set<worker_thread,&worker_thread::on_timeout>(this);
-		card_timer_1s.start(1,1);
-
-		while(!check_stop_flag())
-		{
-			try
-			{
-				ev::dynamic_loop::run(0);
-			}
-			catch(const std::exception&e)
-			{
-				log_error("捕获到异常:%s",e.what());
-			}
-			catch(...)
-			{
-				log_error("捕获到未知异常");
-			}
-		}
-		log_info("worker_thread exit....");
-	}
-
-	virtual void on_async(const std::list<task*>&task_list)
+	std::unique_ptr<ev::timer> card_timer_1s;
+	void loop_init()
 	{
-		for(task*t:task_list)
-		{
-			do_task(*t);
-		}
+		card_timer_1s.reset(new ev::timer(*this));
+		card_timer_1s->set<worker_thread,&worker_thread::on_timeout>(this);
+		card_timer_1s->start(1,1);
 	}
 
 	void update_local_cards()
@@ -178,16 +205,6 @@ struct worker_thread: zloop<task*> ,visitor<std::shared_ptr<card_location_base>>
             }
 		}
 	}
-
-	void join()
-	{
-		m_thread->join();
-	}
-
-	void stop()
-	{
-		async_stop();
-	}
 };
 
 struct worker_impl:worker

+ 19 - 0
worker.h

@@ -2,7 +2,9 @@
 #define _WORKER_HPP_
 #include <ev++.h>
 #include <atomic>
+#include <thread>
 #include <vector>
+#include <zloop.h>
 
 struct task
 {
@@ -53,6 +55,7 @@ struct message_change_card_display:task
     uint64_t m_card_id;
     uint16_t m_display;
 };
+
 struct worker
 {
 	virtual void stop()=0;
@@ -69,5 +72,21 @@ struct worker
 	static worker*instance();
 };
 
+struct loop_thread:zloop<task*>
+{
+	std::unique_ptr<std::thread> m_thread;
+
+	loop_thread ();
+	~loop_thread();
+
+	void run();
+	void stop();
+	void join();
+
+	void on_async(const std::list<task*>&task_list);
+	virtual void loop_init();
+	virtual void do_task(task&t)=0;
+};
+
 #endif
 

+ 1 - 1
znet.cpp

@@ -391,7 +391,7 @@ struct sock_client:fd_io,client_ex
 			}
 			else if(rc==-1)
 			{
-				logn_warn(1,"hava a error on socket %d(%s)",m_fd,m_name.c_str());
+				logn_errno(1,"hava a error on socket %d(%s)",m_fd,m_name.c_str());
 			}
 			return -1;
 		}