From d6464b48b52fc118d0552379fbf4b526017d0253 Mon Sep 17 00:00:00 2001 From: yuanyuanxiang <962914132@qq.com> Date: Sun, 30 Nov 2025 08:02:44 +0100 Subject: [PATCH] Improve: Set multi-thread compression as a option for remote control --- client/IOCPClient.cpp | 14 +++++++++++++- client/IOCPClient.h | 1 + client/ScreenManager.cpp | 5 +++++ common/commands.h | 1 + server/2015Remote/ScreenSpyDlg.cpp | 13 ++++++++++++- 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/client/IOCPClient.cpp b/client/IOCPClient.cpp index 3833c7a..1b41df1 100644 --- a/client/IOCPClient.cpp +++ b/client/IOCPClient.cpp @@ -118,7 +118,7 @@ IOCPClient::IOCPClient(const State&bExit, bool exit_while_disconnect, int mask, #if USING_CTX m_Cctx = ZSTD_createCCtx(); m_Dctx = ZSTD_createDCtx(); - auto n = ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_nbWorkers, 4); + auto n = ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_nbWorkers, 0); if (Z_FAILED(n)) { ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_nbWorkers, 0); } @@ -130,6 +130,18 @@ IOCPClient::IOCPClient(const State&bExit, bool exit_while_disconnect, int mask, #endif } +void IOCPClient::SetMultiThreadCompress(int threadNum) { +#if USING_CTX + BOOL failed = TRUE; + if (threadNum > 1) { + failed = Z_FAILED(ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_nbWorkers, threadNum)); + } + if (failed) { + ZSTD_CCtx_setParameter(m_Cctx, ZSTD_c_nbWorkers, 0); + } +#endif +} + IOCPClient::~IOCPClient() { m_bIsRunning = FALSE; diff --git a/client/IOCPClient.h b/client/IOCPClient.h index 5fa5723..fae2020 100644 --- a/client/IOCPClient.h +++ b/client/IOCPClient.h @@ -208,6 +208,7 @@ public: { return g_bExit; } + void SetMultiThreadCompress(int threadNum=0); protected: virtual int ReceiveData(char* buffer, int bufSize, int flags) { diff --git a/client/ScreenManager.cpp b/client/ScreenManager.cpp index 11fd913..b1be0d2 100644 --- a/client/ScreenManager.cpp +++ b/client/ScreenManager.cpp @@ -421,6 +421,11 @@ VOID CScreenManager::OnReceive(PBYTE szBuffer, ULONG ulLength) SwitchScreen(); break; } + case CMD_MULTITHREAD_COMPRESS: { + int threadNum = szBuffer[1]; + m_ClientObject->SetMultiThreadCompress(threadNum); + break; + } case COMMAND_NEXT: { NotifyDialogIsOpen(); break; diff --git a/common/commands.h b/common/commands.h index bb68f8a..07b9379 100644 --- a/common/commands.h +++ b/common/commands.h @@ -196,6 +196,7 @@ enum { COMMAND_GET_FILE = 67, // 获取文件 COMMAND_SEND_FILE = 68, // 发送文件 COMMAND_SWITCH_SCREEN = 69, + CMD_MULTITHREAD_COMPRESS = 70, // 服务端发出的标识 TOKEN_AUTH = 100, // 要求验证 diff --git a/server/2015Remote/ScreenSpyDlg.cpp b/server/2015Remote/ScreenSpyDlg.cpp index 70d28f0..34b9cfc 100644 --- a/server/2015Remote/ScreenSpyDlg.cpp +++ b/server/2015Remote/ScreenSpyDlg.cpp @@ -27,6 +27,7 @@ enum { IDM_SAVEAVI, IDM_SAVEAVI_H264, IDM_SWITCHSCREEN, + IDM_MULTITHREAD_COMPRESS, }; IMPLEMENT_DYNAMIC(CScreenSpyDlg, CDialog) @@ -247,7 +248,8 @@ BOOL CScreenSpyDlg::OnInitDialog() SysMenu->AppendMenu(MF_SEPARATOR); SysMenu->AppendMenu(MF_STRING, IDM_GET_CLIPBOARD, "鑾峰彇鍓创鏉(&R)"); SysMenu->AppendMenu(MF_STRING, IDM_SET_CLIPBOARD, "璁剧疆鍓创鏉(&L)"); - SysMenu->AppendMenu(MF_STRING, IDM_SWITCHSCREEN, "鍒囨崲鏄剧ず鍣(&M)"); + SysMenu->AppendMenu(MF_STRING, IDM_SWITCHSCREEN, "鍒囨崲鏄剧ず鍣(&1)"); + SysMenu->AppendMenu(MF_STRING, IDM_MULTITHREAD_COMPRESS, "澶氱嚎绋嬪帇缂(&2)"); SysMenu->AppendMenu(MF_SEPARATOR); BOOL all = THIS_CFG.GetInt("settings", "MultiScreen"); @@ -642,6 +644,15 @@ void CScreenSpyDlg::OnSysCommand(UINT nID, LPARAM lParam) break; } + case IDM_MULTITHREAD_COMPRESS:{ + static int threadNum = 0; + threadNum = 4 - threadNum; + BYTE bToken[2] = { CMD_MULTITHREAD_COMPRESS, (BYTE)threadNum }; + m_ContextObject->Send2Client(bToken, sizeof(bToken)); + SysMenu->CheckMenuItem(nID, threadNum ? MF_CHECKED : MF_UNCHECKED); + break; + } + case IDM_TRACE_CURSOR: { // 璺熻釜琚帶绔紶鏍 m_bIsTraceCursor = !m_bIsTraceCursor; //杩欓噷鍦ㄦ敼鍙樻暟鎹 SysMenu->CheckMenuItem(IDM_TRACE_CURSOR, m_bIsTraceCursor ? MF_CHECKED : MF_UNCHECKED);//鍦ㄨ彍鍗曟墦閽╀笉鎵撻挬