减少远程桌面new的频次
减少远程桌面new缓冲区的频率,将部分从堆上new固定内存的操作改用从栈上分配内存。
This commit is contained in:
@@ -127,3 +127,9 @@
|
|||||||
4、当退出远程桌面窗口全屏状态时,不再向远程被控端发送F11。
|
4、当退出远程桌面窗口全屏状态时,不再向远程被控端发送F11。
|
||||||
|
|
||||||
5、发现在有线网络条件下主控端崩溃几率较小。
|
5、发现在有线网络条件下主控端崩溃几率较小。
|
||||||
|
|
||||||
|
6、禁用主控端输入法,解决使用远程桌面在被控端输入时的麻烦问题。
|
||||||
|
|
||||||
|
2019.1.21
|
||||||
|
|
||||||
|
减少远程桌面new缓冲区的频率,将部分从堆上new固定内存的操作改用从栈上分配内存。
|
||||||
|
|||||||
@@ -86,7 +86,6 @@ char* RegisterOperation::FindPath()
|
|||||||
if(KeyCount>0&&KeySize>1){
|
if(KeyCount>0&&KeySize>1){
|
||||||
int Size=sizeof(REGMSG)+1;
|
int Size=sizeof(REGMSG)+1;
|
||||||
|
|
||||||
//buf=new char[KeyCnt*KeySize+size+1];
|
|
||||||
DWORD DataSize=KeyCount*KeySize+Size+1; //[TOKEN_REG_PATH][2 11 ccccc\0][11][11]
|
DWORD DataSize=KeyCount*KeySize+Size+1; //[TOKEN_REG_PATH][2 11 ccccc\0][11][11]
|
||||||
szBuffer=(char*)LocalAlloc(LPTR, DataSize);
|
szBuffer=(char*)LocalAlloc(LPTR, DataSize);
|
||||||
ZeroMemory(szBuffer,DataSize);
|
ZeroMemory(szBuffer,DataSize);
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ CScreenManager::CScreenManager(IOCPClient* ClientObject, int n):CManager(ClientO
|
|||||||
|
|
||||||
m_ScreenSpyObject = new CScreenSpy(16);
|
m_ScreenSpyObject = new CScreenSpy(16);
|
||||||
|
|
||||||
|
szBuffer = new char[4 * m_ScreenSpyObject->m_ulFullWidth * m_ScreenSpyObject->m_ulFullHeight];
|
||||||
|
|
||||||
m_hWorkThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WorkThreadProc,this,0,NULL);
|
m_hWorkThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)WorkThreadProc,this,0,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,8 +66,6 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
|
|||||||
printf("SendScreen Span = %d ms\n", span);
|
printf("SendScreen Span = %d ms\n", span);
|
||||||
last = clock();
|
last = clock();
|
||||||
This->SendNextScreen(szBuffer, ulNextSendLength);
|
This->SendNextScreen(szBuffer, ulNextSendLength);
|
||||||
delete[] szBuffer;
|
|
||||||
szBuffer = NULL;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
timeEndPeriod(1);
|
timeEndPeriod(1);
|
||||||
@@ -102,6 +102,11 @@ CScreenManager::~CScreenManager()
|
|||||||
|
|
||||||
delete[] m_ScreenSpyObject;
|
delete[] m_ScreenSpyObject;
|
||||||
m_ScreenSpyObject = NULL;
|
m_ScreenSpyObject = NULL;
|
||||||
|
if(szBuffer)
|
||||||
|
{
|
||||||
|
delete [] szBuffer;
|
||||||
|
szBuffer = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID CScreenManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
VOID CScreenManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
||||||
@@ -195,16 +200,12 @@ VOID CScreenManager::SendFirstScreen()
|
|||||||
}
|
}
|
||||||
|
|
||||||
ULONG ulFirstSendLength = 1 + m_ScreenSpyObject->GetFirstScreenLength();
|
ULONG ulFirstSendLength = 1 + m_ScreenSpyObject->GetFirstScreenLength();
|
||||||
LPBYTE szBuffer = new BYTE[ulFirstSendLength];
|
|
||||||
|
|
||||||
szBuffer[0] = TOKEN_FIRSTSCREEN;
|
szBuffer[0] = TOKEN_FIRSTSCREEN;
|
||||||
memcpy(szBuffer + 1, FirstScreenData, ulFirstSendLength - 1);
|
memcpy(szBuffer + 1, FirstScreenData, ulFirstSendLength - 1);
|
||||||
|
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, ulFirstSendLength);
|
m_ClientObject->OnServerSending((char*)szBuffer, ulFirstSendLength);
|
||||||
|
szBuffer[ulFirstSendLength] = 0;
|
||||||
delete [] szBuffer;
|
|
||||||
|
|
||||||
szBuffer = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
||||||
@@ -218,10 +219,9 @@ const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
|||||||
|
|
||||||
ulNextSendLength += 1;
|
ulNextSendLength += 1;
|
||||||
|
|
||||||
char* szBuffer = new char[ulNextSendLength];
|
|
||||||
|
|
||||||
szBuffer[0] = TOKEN_NEXTSCREEN;
|
szBuffer[0] = TOKEN_NEXTSCREEN;
|
||||||
memcpy(szBuffer + 1, NextScreenData, ulNextSendLength - 1);
|
memcpy(szBuffer + 1, NextScreenData, ulNextSendLength - 1);
|
||||||
|
szBuffer[ulNextSendLength] = 0;
|
||||||
|
|
||||||
return szBuffer;
|
return szBuffer;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ class IOCPClient;
|
|||||||
class CScreenManager : public CManager
|
class CScreenManager : public CManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
char* szBuffer;
|
||||||
CScreenManager(IOCPClient* ClientObject, int n);
|
CScreenManager(IOCPClient* ClientObject, int n);
|
||||||
virtual ~CScreenManager();
|
virtual ~CScreenManager();
|
||||||
HANDLE m_hWorkThread;
|
HANDLE m_hWorkThread;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<RemoteDebuggerCommand>D:\VM\Remoter\TestRun.exe</RemoteDebuggerCommand>
|
<RemoteDebuggerCommand>C:\VM\Remoter\TestRun.exe</RemoteDebuggerCommand>
|
||||||
<RemoteDebuggerWorkingDirectory>D:\VM\Remoter</RemoteDebuggerWorkingDirectory>
|
<RemoteDebuggerWorkingDirectory>C:\VM\Remoter</RemoteDebuggerWorkingDirectory>
|
||||||
<RemoteDebuggerServerName>192.168.12.248</RemoteDebuggerServerName>
|
<RemoteDebuggerServerName>192.168.43.2</RemoteDebuggerServerName>
|
||||||
<DeploymentDirectory>D:\VM\Remoter</DeploymentDirectory>
|
<DeploymentDirectory>C:\VM\Remoter</DeploymentDirectory>
|
||||||
<AdditionalFiles>$(TargetDir)\TestRun.pdb;$(TargetDir)\ServerDll.dll;$(TargetDir)\ServerDll.pdb</AdditionalFiles>
|
<AdditionalFiles>$(TargetDir)\TestRun.pdb;$(TargetDir)\ServerDll.dll;$(TargetDir)\ServerDll.pdb</AdditionalFiles>
|
||||||
<RemoteDebuggerDeployDebugCppRuntime>false</RemoteDebuggerDeployDebugCppRuntime>
|
<RemoteDebuggerDeployDebugCppRuntime>false</RemoteDebuggerDeployDebugCppRuntime>
|
||||||
<DebuggerFlavor>WindowsRemoteDebugger</DebuggerFlavor>
|
<DebuggerFlavor>WindowsRemoteDebugger</DebuggerFlavor>
|
||||||
|
|||||||
@@ -83,25 +83,21 @@ void CVideoManager::Destroy()
|
|||||||
|
|
||||||
void CVideoManager::SendBitMapInfor()
|
void CVideoManager::SendBitMapInfor()
|
||||||
{
|
{
|
||||||
DWORD dwBytesLength = 1 + sizeof(BITMAPINFO);
|
const int dwBytesLength = 1 + sizeof(BITMAPINFO);
|
||||||
LPBYTE szBuffer = new BYTE[dwBytesLength];
|
BYTE szBuffer[dwBytesLength + 3] = { 0 };
|
||||||
if (szBuffer == NULL)
|
szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO;
|
||||||
return;
|
|
||||||
|
|
||||||
szBuffer[0] = TOKEN_WEBCAM_BITMAPINFO; //+ ͷ
|
|
||||||
memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO));
|
memcpy(szBuffer + 1, m_CapVideo.GetBmpInfor(), sizeof(BITMAPINFO));
|
||||||
m_ClientObject->OnServerSending((char*)szBuffer, dwBytesLength);
|
m_ClientObject->OnServerSending((char*)szBuffer, dwBytesLength);
|
||||||
delete [] szBuffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CVideoManager::SendNextScreen()
|
void CVideoManager::SendNextScreen()
|
||||||
{
|
{
|
||||||
DWORD dwBmpImageSize=0;
|
DWORD dwBmpImageSize=0;
|
||||||
LPVOID lpDIB =m_CapVideo.GetDIB(dwBmpImageSize); //m_pVideoCap->GetDIB();
|
LPVOID lpDIB =m_CapVideo.GetDIB(dwBmpImageSize);
|
||||||
// token + IsCompress + m_fccHandler + DIB
|
// token + IsCompress + m_fccHandler + DIB
|
||||||
int nHeadLen = 1 + 1 + 4;
|
int nHeadLen = 1 + 1 + 4;
|
||||||
|
|
||||||
UINT nBufferLen = nHeadLen + dwBmpImageSize;//m_pVideoCap->m_lpbmi->bmiHeader.biSizeImage;
|
UINT nBufferLen = nHeadLen + dwBmpImageSize;
|
||||||
LPBYTE lpBuffer = new BYTE[nBufferLen];
|
LPBYTE lpBuffer = new BYTE[nBufferLen];
|
||||||
|
|
||||||
lpBuffer[0] = TOKEN_WEBCAM_DIB;
|
lpBuffer[0] = TOKEN_WEBCAM_DIB;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
<LocalDebuggerCommandArguments>192.168.12.250 2356</LocalDebuggerCommandArguments>
|
<LocalDebuggerCommandArguments>192.168.104.250 2356</LocalDebuggerCommandArguments>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "2015Remote.h"
|
#include "2015Remote.h"
|
||||||
#include "ScreenSpyDlg.h"
|
#include "ScreenSpyDlg.h"
|
||||||
#include "afxdialogex.h"
|
#include "afxdialogex.h"
|
||||||
|
#include <imm.h>
|
||||||
|
|
||||||
|
|
||||||
// CScreenSpyDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
// CScreenSpyDlg <20>Ի<EFBFBD><D4BB><EFBFBD>
|
||||||
@@ -28,6 +29,7 @@ IMPLEMENT_DYNAMIC(CScreenSpyDlg, CDialog)
|
|||||||
CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
CScreenSpyDlg::CScreenSpyDlg(CWnd* Parent, IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
||||||
: CDialog(CScreenSpyDlg::IDD, Parent)
|
: CDialog(CScreenSpyDlg::IDD, Parent)
|
||||||
{
|
{
|
||||||
|
ImmDisableIME(0);// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뷨
|
||||||
m_bFullScreen = FALSE;
|
m_bFullScreen = FALSE;
|
||||||
|
|
||||||
m_iocpServer = IOCPServer;
|
m_iocpServer = IOCPServer;
|
||||||
@@ -415,7 +417,7 @@ BOOL CScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
|
|||||||
case WM_SYSKEYDOWN:
|
case WM_SYSKEYDOWN:
|
||||||
case WM_SYSKEYUP:
|
case WM_SYSKEYUP:
|
||||||
if (pMsg->wParam == VK_F11 && LeaveFullScreen()) // F11: <20>˳<EFBFBD>ȫ<EFBFBD><C8AB>
|
if (pMsg->wParam == VK_F11 && LeaveFullScreen()) // F11: <20>˳<EFBFBD>ȫ<EFBFBD><C8AB>
|
||||||
return true;
|
return TRUE;
|
||||||
if (pMsg->wParam != VK_LWIN && pMsg->wParam != VK_RWIN)
|
if (pMsg->wParam != VK_LWIN && pMsg->wParam != VK_RWIN)
|
||||||
{
|
{
|
||||||
MSG Msg;
|
MSG Msg;
|
||||||
@@ -426,7 +428,7 @@ BOOL CScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
|
|||||||
SendCommand(&Msg);
|
SendCommand(&Msg);
|
||||||
}
|
}
|
||||||
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
|
if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE)
|
||||||
return true;// <20><><EFBFBD><EFBFBD>Enter<65><72>ESC<53>رնԻ<D5B6>
|
return TRUE;// <20><><EFBFBD><EFBFBD>Enter<65><72>ESC<53>رնԻ<D5B6>
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -439,12 +441,12 @@ VOID CScreenSpyDlg::SendCommand(MSG* Msg)
|
|||||||
if (!m_bIsCtrl)
|
if (!m_bIsCtrl)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
LPBYTE szData = new BYTE[sizeof(MSG) + 1];
|
const int length = sizeof(MSG) + 1;
|
||||||
|
BYTE szData[length + 3];
|
||||||
szData[0] = COMMAND_SCREEN_CONTROL;
|
szData[0] = COMMAND_SCREEN_CONTROL;
|
||||||
memcpy(szData + 1, Msg, sizeof(MSG));
|
memcpy(szData + 1, Msg, sizeof(MSG));
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, szData, sizeof(MSG) + 1);
|
szData[length] = 0;
|
||||||
|
m_iocpServer->OnClientPreSending(m_ContextObject, szData, length);
|
||||||
delete[] szData;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL CScreenSpyDlg::SaveSnapshot(void)
|
BOOL CScreenSpyDlg::SaveSnapshot(void)
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ void CTalkDlg::DoDataExchange(CDataExchange* pDX)
|
|||||||
{
|
{
|
||||||
CDialog::DoDataExchange(pDX);
|
CDialog::DoDataExchange(pDX);
|
||||||
DDX_Control(pDX, IDC_EDIT_TALK, m_EditTalk);
|
DDX_Control(pDX, IDC_EDIT_TALK, m_EditTalk);
|
||||||
|
m_EditTalk.SetLimitText(2048);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -63,15 +64,12 @@ void CTalkDlg::OnBnClickedButtonTalk()
|
|||||||
CString strData;
|
CString strData;
|
||||||
m_EditTalk.GetWindowText(strData); //EditBox <20>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
m_EditTalk.GetWindowText(strData); //EditBox <20>ϻ<EFBFBD><CFBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
char* szBuffer = new char[iLength + 1]; // 2019.1.5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
char szBuffer[4096] = {0};
|
||||||
memset(szBuffer,0,sizeof(char)*iLength);
|
|
||||||
|
|
||||||
strcpy(szBuffer,strData.GetBuffer(0));
|
strcpy(szBuffer,strData.GetBuffer(0));
|
||||||
|
|
||||||
m_EditTalk.SetWindowText(NULL); //EditBox <20>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
m_EditTalk.SetWindowText(NULL); //EditBox <20>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
|
||||||
m_iocpServer->OnClientPreSending(m_ContextObject, (LPBYTE)szBuffer, strlen(szBuffer));//<2F><><EFBFBD>Լ<EFBFBD><D4BC>ڴ<EFBFBD><DAB4>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
|
m_iocpServer->OnClientPreSending(m_ContextObject, (LPBYTE)szBuffer, strlen(szBuffer));//<2F><><EFBFBD>Լ<EFBFBD><D4BC>ڴ<EFBFBD><DAB4>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD>
|
||||||
delete [] szBuffer;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user