Parcourir la source

退出登录也做好了

zhangyang il y a 6 ans
Parent
commit
f18353e607

BIN
bin/Win32/Debug/zhipuzi_pos_windows/db/pos.db


BIN
bin/Win32/Debug/zhipuzi_pos_windows/zhipuzi_pos_windows.exe


+ 44 - 1
lewaimai_dispatch/network/CMessagePush.cpp

@@ -13,6 +13,10 @@ CMessagePush::~CMessagePush()
 
 void CMessagePush::Start()
 {
+	m_is_work = true;
+
+	m_nStopNum = 0;
+
     //心跳包
 	std::thread(&CMessagePush::KeepAlive, this).detach();
 
@@ -39,30 +43,42 @@ void CMessagePush::Stop()
 {
 	m_is_work = false;
 
+	socket_.close();
+
+	m_voice_mutex.lock();
 	while (!m_voice_queue.empty())
 	{
 		m_voice_queue.pop();
 	}
+	m_voice_mutex.unlock();
 
+	m_confirm_mutex.lock();
 	while (!m_confirm_queue.empty())
 	{
 		m_confirm_queue.pop();
 	}
+	m_confirm_mutex.unlock();
 
+	m_printer_mutex.lock();
 	while (!m_printer_queue.empty())
 	{
 		m_printer_queue.pop();
 	}
+	m_printer_mutex.unlock();
 
+	m_shouyin_printer_mutex.lock();
 	while (!m_shouyin_printer_queue.empty())
 	{
 		m_shouyin_printer_queue.pop();
 	}
+	m_shouyin_printer_mutex.unlock();
 
+	m_chufang_printer_mutex.lock();
 	while (!m_chufang_printer_queue.empty())
 	{
 		m_chufang_printer_queue.pop();
 	}
+	m_chufang_printer_mutex.unlock();
 }
 
 void CMessagePush::KeepAlive()
@@ -132,7 +148,7 @@ void CMessagePush::KeepAlive()
 		CSystem::my_sleep(10);
 	}
 
-	socket_.close();
+	AddStopNum();
 }
 
 void CMessagePush::ReceiveMessage()
@@ -206,6 +222,8 @@ void CMessagePush::ReceiveMessage()
 			continue;
 		}
 	}
+
+	AddStopNum();
 }
 
 void CMessagePush::AddVoice(std::string order_id)
@@ -282,6 +300,8 @@ void CMessagePush::HandleVoice()
         //8秒内最多播放一次
         CSystem::my_sleep(8);
     }
+
+	AddStopNum();
 }
 
 void CMessagePush::HandleConfirm()
@@ -306,6 +326,8 @@ void CMessagePush::HandleConfirm()
         CWaimaiOrder newOrder;
         newOrder.ConfirmeOrder(order_id);
     }
+
+	AddStopNum();
 }
 
 void CMessagePush::HandlePrinter()
@@ -348,6 +370,8 @@ void CMessagePush::HandlePrinter()
             AddChufangPrinter(order);
         }
     }
+
+	AddStopNum();
 }
 
 void CMessagePush::HandleShouyinPrinter()
@@ -373,6 +397,8 @@ void CMessagePush::HandleShouyinPrinter()
         CPosPrinter printer;
         printer.PrintWaimaiOrderShouyin(order);
     }
+
+	AddStopNum();
 }
 
 void CMessagePush::HandleChufangPrinter()
@@ -398,4 +424,21 @@ void CMessagePush::HandleChufangPrinter()
         CPosPrinter printer;
         printer.PrintWaimaiOrderChufang(order);
     }
+
+	AddStopNum();
+}
+
+void CMessagePush::AddStopNum()
+{
+	m_nStopNumMutex.lock();
+
+	m_nStopNum++;
+
+	m_nStopNumMutex.unlock();
+
+	if (m_nStopNum == 7)
+	{
+		//确认所有子线程都退出了,再删除自己
+		delete this;
+	}
 }

+ 8 - 1
lewaimai_dispatch/network/CMessagePush.h

@@ -58,8 +58,15 @@ public:
 	void AddPinter(std::string order_id, std::string order_no);
 	void AddShouyinPrinter(CWaimaiOrder order);
 	void AddChufangPrinter(CWaimaiOrder order);
+
+private:
+	void AddStopNum();
+
 private:
-	bool m_is_work = true;
+	bool m_is_work;
+
+	int m_nStopNum = 0;
+	std::mutex m_nStopNumMutex;
 
 	boost::asio::io_context m_io_context;
 	tcp::socket socket_;

+ 22 - 1
lewaimai_dispatch/wnd/CLoginWnd.cpp

@@ -61,7 +61,7 @@ void CLoginWnd::Notify(TNotifyUI& msg)
     {
         if(msg.pSender->GetName() == _T("closebtn"))
         {
-            PostQuitMessage(0);
+			PostQuitMessage(0);
             return;
         }
         else if(msg.pSender->GetName() == _T("loginBtn"))
@@ -142,6 +142,21 @@ LRESULT CLoginWnd::OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHand
     return 0;
 }
 
+LRESULT CLoginWnd::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	bHandled = FALSE;
+	return 0;
+}
+
+/*
+ *这个是窗口被销毁的时候调用的
+ **/
+LRESULT CLoginWnd::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	bHandled = FALSE;
+	return 0;
+}
+
 LRESULT CLoginWnd::OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 {
     if(::IsIconic(*this))
@@ -220,6 +235,12 @@ LRESULT CLoginWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
     case WM_CREATE:
         lRes = OnCreate(uMsg, wParam, lParam, bHandled);
         break;
+	case WM_CLOSE:
+		lRes = OnClose(uMsg, wParam, lParam, bHandled);
+		break;
+	case WM_DESTROY:
+		lRes = OnDestroy(uMsg, wParam, lParam, bHandled);
+		break;
     case WM_NCACTIVATE:
         lRes = OnNcActivate(uMsg, wParam, lParam, bHandled);
         break;

+ 5 - 1
lewaimai_dispatch/wnd/CLoginWnd.h

@@ -23,7 +23,7 @@ public:
 
     void OnFinalMessage(HWND /*hWnd*/)
     {
-        m_pm.RemovePreMessageFilter(this);
+        //m_pm.RemovePreMessageFilter(this);
         delete this;
     };
 
@@ -33,6 +33,10 @@ public:
 
 	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
+	LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
+	LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+
 	LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
 	LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

+ 37 - 2
lewaimai_dispatch/wnd/CMainWnd.cpp

@@ -708,8 +708,6 @@ void CMainWnd::HandleClickMsg(TNotifyUI& msg)
 		pLogin->SetIcon(IDI_ICON_DUILIB);
 		pLogin->CenterWindow();
 
-		//pLogin->ShowModal();
-
 		::ShowWindow(*pLogin, SW_SHOWNORMAL);
 
 		Close();
@@ -1043,6 +1041,43 @@ LRESULT CMainWnd::OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled
     return 0;
 }
 
+LRESULT CMainWnd::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	bHandled = FALSE;
+	return 0;
+}
+
+/*
+ *这个是窗口被销毁的时候调用的
+ **/
+LRESULT CMainWnd::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	//直接退出程序,或者退出登录都会执行这个
+	m_push->Stop();
+
+	bHandled = FALSE;
+	return 0;
+}
+
+LRESULT CMainWnd::OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	if (::IsIconic(*this))
+	{
+		bHandled = FALSE;
+	}
+	return (wParam == 0) ? TRUE : FALSE;
+}
+
+LRESULT CMainWnd::OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	return 0;
+}
+
+LRESULT CMainWnd::OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
+{
+	return 0;
+}
+
 LRESULT CMainWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
 {
     POINT pt;

+ 22 - 45
lewaimai_dispatch/wnd/CMainWnd.h

@@ -40,65 +40,42 @@ public:
 
     }
 
-	void Notify(TNotifyUI& msg);
+    void Notify(TNotifyUI& msg);
 
-	void HandleClickMsg(TNotifyUI& msg);
-	void HandleSelectChangeMsg(TNotifyUI& msg);
-	void HandleItemSelectMsg(TNotifyUI& msg);
+    void HandleClickMsg(TNotifyUI& msg);
+    void HandleSelectChangeMsg(TNotifyUI& msg);
+    void HandleItemSelectMsg(TNotifyUI& msg);
 
-	void InitSettingStatus();
+    void InitSettingStatus();
 
     LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-    LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-    {
-        bHandled = FALSE;
-        return 0;
-    }
+    LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-    LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-    {
-        ::PostQuitMessage(0L);
+    LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-        bHandled = FALSE;
-        return 0;
-    }
+    LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-    LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-    {
-        if(::IsIconic(*this))
-        {
-            bHandled = FALSE;
-        }
-        return (wParam == 0) ? TRUE : FALSE;
-    }
+    LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-    LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-    {
-        return 0;
-    }
+    LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-    LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
-    {
-        return 0;
-    }
+    LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-	LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+    LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+    LRESULT OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-	LRESULT OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+    LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
-	LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+    LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
 
-	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
 
-	
-	//添加托盘图标(初始化)
-	void AddTrayIcon();
+    //添加托盘图标(初始化)
+    void AddTrayIcon();
 
-	//处理托盘图标上的事件
-	LRESULT OnTrayIcon(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
+    //处理托盘图标上的事件
+    LRESULT OnTrayIcon(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
 
 public:
     CPaintManagerUI m_pm;
@@ -109,8 +86,8 @@ private:
     CButtonUI* m_pRestoreBtn;
     CButtonUI* m_pMinBtn;
 
-	//定义托盘图标对象
-	NOTIFYICONDATA m_trayIcon;
+    //定义托盘图标对象
+    NOTIFYICONDATA m_trayIcon;
 
-	CMessagePush* m_push;
+    CMessagePush* m_push = NULL;
 };