diff --git a/ReadMe.txt b/ReadMe.txt index 5d4bf1c..d924867 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -225,3 +225,9 @@ TestRun在写入开机自启动项时先提升权限,以防止因权限不足 2.增加了使用VLD的操作方法,详见"server\2015Remote\stdafx.h"。 注意:自VS2019开始,不支持XP系统了(微软已经声明这个变更)。如果有需要在XP系统进行监控的需求,推荐使用"2015Remote.sln"。 如果使用VS2015编译,需将WindowsTargetPlatformVersion修改为8.1,将PlatformToolset修改为v140_xp。 + +2024.12.26 +解决主控程序概率性崩溃的问题,增强主控程序运行的稳定性。本人未进行广泛测试,不保证彻底根治,但稳定性有明显改观。 +fix: client threads number excceeding bug +fix: #19 the CBuffer causing server crash +fix: showing the wrong host quantity in status bar diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index d5eb698..a12f808 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -122,7 +122,6 @@ CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent): CDialogEx(CMy2015RemoteDlg::I m_bmOnline[0].LoadBitmap(IDB_BITMAP_ONLINE); m_bmOnline[1].LoadBitmap(IDB_BITMAP_ONLINE); - m_iCount = 0; InitializeCriticalSection(&m_cs); } @@ -337,7 +336,6 @@ VOID CMy2015RemoteDlg::AddList(CString strIP, CString strAddr, CString strPCName m_CList_Online.SetItemText(i,ONLINELIST_PING,strPing); m_CList_Online.SetItemData(i,(DWORD_PTR)ContextObject); - m_iCount++; ShowMessage(true,strIP+""); LeaveCriticalSection(&m_cs); @@ -356,7 +354,9 @@ VOID CMy2015RemoteDlg::ShowMessage(BOOL bOk, CString strMsg) CString strStatusMsg; - m_iCount=(m_iCount<=0?0:m_iCount); //ֹiCount -1 + EnterCriticalSection(&m_cs); + int m_iCount = m_CList_Online.GetItemCount(); + LeaveCriticalSection(&m_cs); strStatusMsg.Format("%d",m_iCount); m_StatusBar.SetPaneText(0,strStatusMsg); //״̬ʾ @@ -479,6 +479,7 @@ void CMy2015RemoteDlg::OnSize(UINT nType, int cx, int cy) { return; } + EnterCriticalSection(&m_cs); if (m_CList_Online.m_hWnd!=NULL) //ؼҲǴҲо { CRect rc; @@ -496,6 +497,7 @@ void CMy2015RemoteDlg::OnSize(UINT nType, int cx, int cy) m_CList_Online.SetColumnWidth(i,(lenth)); //õǰĿ } } + LeaveCriticalSection(&m_cs); if (m_CList_Message.m_hWnd!=NULL) { @@ -549,12 +551,14 @@ void CMy2015RemoteDlg::OnClose() #endif BYTE bToken = CLIENT_EXIT_WITH_SERVER ? COMMAND_BYE : SERVER_EXIT; + EnterCriticalSection(&m_cs); int n = m_CList_Online.GetItemCount(); for(int Pos = 0; Pos < n; ++Pos) { CONTEXT_OBJECT* ContextObject = (CONTEXT_OBJECT*)m_CList_Online.GetItemData(Pos); m_iocpServer->OnClientPreSending(ContextObject, &bToken, sizeof(BYTE)); } + LeaveCriticalSection(&m_cs); Sleep(200); EnterCriticalSection(&m_cs); @@ -608,7 +612,10 @@ void CMy2015RemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult) GetCursorPos(&Point); int iCount = SubMenu->GetMenuItemCount(); - if (m_CList_Online.GetSelectedCount() == 0) //ûѡ + EnterCriticalSection(&m_cs); + int n = m_CList_Online.GetSelectedCount(); + LeaveCriticalSection(&m_cs); + if (n == 0) //ûѡ { for (int i = 0;iOnClientPreSending(ContextObject,szBuffer, ulLength); } + LeaveCriticalSection(&m_cs); } //Bar @@ -1022,7 +1032,6 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam) { ip = m_CList_Online.GetItemText(i, ONLINELIST_IP); m_CList_Online.DeleteItem(i); - m_iCount--; ShowMessage(true, ip + ""); break; } diff --git a/server/2015Remote/2015RemoteDlg.h b/server/2015Remote/2015RemoteDlg.h index 9e9a67a..f9bff62 100644 --- a/server/2015Remote/2015RemoteDlg.h +++ b/server/2015Remote/2015RemoteDlg.h @@ -82,7 +82,7 @@ public: #endif CRITICAL_SECTION m_cs; BOOL isClosed; - UINT m_iCount; + CBitmap m_bmOnline[2]; afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnClose();