CN106776022A - 一种优化游戏进程cpu使用率的系统及方法 - Google Patents
一种优化游戏进程cpu使用率的系统及方法 Download PDFInfo
- Publication number
- CN106776022A CN106776022A CN201611132053.4A CN201611132053A CN106776022A CN 106776022 A CN106776022 A CN 106776022A CN 201611132053 A CN201611132053 A CN 201611132053A CN 106776022 A CN106776022 A CN 106776022A
- Authority
- CN
- China
- Prior art keywords
- functions
- game process
- present
- mypresent
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种优化游戏进程CPU使用率的系统,涉及计算机进程优化技术领域,包括地址获取模块,用于获取游戏进程中Present函数的内存地址;Hook模块,用于在游戏进程中对Present函数增加一个MyPresent函数,使用Present函数的内存地址将Present函数与MyPresent函数进行挂钩;sleep函数加入模块,用于对MyPresent函数增加一个sleep函数;sleep函数用于周期性暂停Present函数的执行。本发明可有效降低游戏进程CPU使用率且可通用于各种游戏进程。本发明还公开了一种优化游戏进程CPU使用率的方法。
Description
技术领域
本发明涉及计算机进程优化技术领域,具体涉及一种优化游戏进程CPU使用率的系统及方法。
背景技术
目前,对于PC端的游戏直播方法是主播一边运行游戏进程,一边通过一个直播软件来获取游戏的画面,并对画面进行视频编码,再通过网络发送到直播网站的服务器,供观众通过网络下载视频流进行观看。由于大型网络游戏本身对电脑CPU资源的占用率很高,加上视频的编码和解密也比较消耗电脑CPU的资源,要实现流畅的游戏直播对主播的电脑配置,网络配置的要求都相当高。一些主播的电脑配置或网络带宽比较低的情况下,就无法顺畅进行游戏直播。
现有技术存在针对游戏进程源代码开发的降低游戏进程CPU使用率的技术方案,但是,游戏进程源代码一般属于游戏开发商所有,主播或一般游戏用户较难获取,且针对某个游戏源代码开发的CPU使用率的技术方案无法适用于其他游戏,不具有通用性,从而开发成本太高而通用性差。因此,亟需一种能够通用的降低游戏进程CPU使用率的技术方案。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种优化游戏进程CPU使用率的系统及方法,可有效降低游戏进程CPU使用率且可通用于各种游戏进程。
为达到以上目的,本发明采取的技术方案是:一种优化游戏进程CPU使用率的系统,包括:
地址获取模块,用于获取游戏进程中Present函数的内存地址;
Hook模块,用于在游戏进程中对所述Present函数增加一个MyPresent函数,使用所述Present函数的内存地址将所述Present函数与MyPresent函数进行挂钩;
sleep函数加入模块,用于对所述MyPresent函数增加一个sleep函数;所述sleep函数用于暂停Present函数的执行。
在上述技术方案的基础上,所述Hook模块包括函数加入单元和函数挂钩单元:
所述函数加入单元用于在游戏进程中对所述Present函数增加一个MyPresent函数;
所述函数挂钩单元用于通过系统Detours库的API函数使用所述Present函数的内存地址将MyPresent函数与游戏进程中的Present函数进行挂钩。
在上述技术方案的基础上,所述优化游戏进程CPU使用率的系统还包括时间参数设置模块,用于设置sleep函数的时间参数,所述时间参数为调用所述sleep函数暂停Present函数的时长。
在上述技术方案的基础上,所述时间参数为可调的。
在上述技术方案的基础上,所述时间参数为30毫秒。
一种采用优化游戏进程CPU使用率的系统的优化游戏进程CPU使用率的方法,包括:
S1,通过所述地址获取模块获取游戏进程中Present函数的内存地址;
S2,通过所述Hook模块在游戏进程中对所述Present函数增加一个MyPresent函数,使用所述Present函数的内存地址将所述Present函数与MyPresent函数进行挂钩;
S3,通过所述sleep函数加入模块对所述挂钩函数增加一个sleep函数;所述sleep函数用于暂停Present函数的执行;
S4,通过所述时间参数设置模块设置sleep函数的时间参数,所述时间参数为调用所述sleep函数暂停Present函数的时长。
在上述技术方案的基础上,步骤S1包括:
通过所述地址获取模块查找Present函数在系统的DirectX提供的d3d9.h文件中的函数列表序号,通过该序号可以获取Present函数的内存地址。
在上述技术方案的基础上,步骤S2包括:
通过所述Hook模块在游戏进程中对所述Present函数增加一个MyPresent函数;
通过系统Detours库的API函数使用所述Present函数的内存地址将MyPresent函数与游戏进程中的Present函数进行挂钩。
在上述技术方案的基础上,通过所述Hook模块在游戏进程中增加一个MyPresent函数包括:
通过所述Hook模块在游戏进程的内存空间中分配一个内存;
将MyPresent函数的磁盘路径写入到已经分配的内存中;
在游戏进程中创建一个线程,通过所述线程加载MyPresent函数的磁盘路径。
在上述技术方案的基础上,所述时间参数为30毫秒。
与现有技术相比,本发明的优点在于:
本发明通过在游戏进程中对其Present函数增加一个MyPresent函数,将Present函数与MyPresent函数进行挂钩;再对MyPresent函数增加一个sleep函数,这样每次调用Present函数时,均会调用sleep函数暂停Present函数的执行。由于在游戏进程中每渲染一帧画面的时候会调用一次Present函数,因此通过加入sleep函数暂停Present函数的执行,可以减少Present函数的调用次数,从而减少一秒钟内在游戏进程中渲染画面的次数。由于游戏进程中消耗CPU资源比较高的进程之一便是渲染游戏画面的进程,因此,减少游戏进程中渲染画面的次数可以实现降低游戏进程CPU使用率的目的。同时,修改游戏进程中渲染次数是对绝大部分游戏都通用的一个方法,因此,此方案适用于各种游戏进程。
附图说明
图1为本发明实施例中优化游戏进程CPU使用率的系统的结构示意图;
图2为本发明实施例中优化游戏进程CPU使用率的方法的流程示意图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
参见图1所示,本发明实施例提供一种优化游戏进程CPU使用率的系统,包括:
地址获取模块,用于获取游戏进程中Present函数的内存地址;
Hook模块,用于在游戏进程中对所述Present函数增加一个MyPresent函数,使用所述Present函数的内存地址将所述Present函数与MyPresent函数进行挂钩;
sleep函数加入模块,用于对所述MyPresent函数增加一个sleep函数;所述sleep函数用于暂停Present函数的执行。
所述Hook模块包括函数加入单元和函数挂钩单元:
所述函数加入单元用于在游戏进程中对所述Present函数增加一个MyPresent函数;
所述函数挂钩单元用于通过系统Detours库的API函数使用所述Present函数的内存地址将MyPresent函数与游戏进程中的Present函数进行挂钩。
所述优化游戏进程CPU使用率的系统还包括时间参数设置模块,用于设置sleep函数的时间参数,所述时间参数为调用所述sleep函数暂停Present函数的时长。所述时间参数为可调的。所述时间参数为30毫秒。
例如,sleep函数的时间参数的数值越大,那么CPU的消耗越小,同时1秒内渲染的游戏画面也越少。只要游戏画面看起来是连贯的,则可以继续改大sleep函数的时间参数,直到游戏画面产生卡顿,则说明sleep函数的时间参数过大,应当相应改小。
本发明通过在游戏进程中对其Present函数增加一个MyPresent函数,将Present函数与MyPresent函数进行挂钩;再对MyPresent函数增加一个sleep函数,这样每次调用Present函数时,均会调用sleep函数暂停Present函数的执行。由于在游戏进程中每渲染一帧画面的时候会调用一次Present函数,因此通过加入sleep函数暂停Present函数的执行,可以减少Present函数的调用次数,从而减少一秒钟内在游戏进程中渲染画面的次数。由于游戏进程中消耗CPU资源比较高的进程之一便是渲染游戏画面的进程,因此,减少游戏进程中渲染画面的次数可以实现降低游戏进程CPU使用率的目的。同时,修改游戏进程中渲染次数是对绝大部分游戏都通用的一个方法,因此,此方案适用于各种游戏进程。
一种采用优化游戏进程CPU使用率的系统的优化游戏进程CPU使用率的方法,包括:
S1,通过所述地址获取模块获取游戏进程中Present函数的内存地址;
S2,通过所述Hook模块在游戏进程中对所述Present函数增加一个MyPresent函数,使用所述Present函数的内存地址将所述Present函数与MyPresent函数进行挂钩;
S3,通过所述sleep函数加入模块对所述挂钩函数增加一个sleep函数;所述sleep函数用于暂停Present函数的执行;
S4,通过所述时间参数设置模块设置sleep函数的时间参数,所述时间参数为调用所述sleep函数暂停Present函数的时长。所述时间参数为30毫秒。
步骤S1包括:
通过所述地址获取模块查找Present函数在系统的DirectX提供的d3d9.h文件中的函数列表序号,通过该序号可以获取Present函数的内存地址。
例如,通过系统的IDirect3D9Ex的接口CreateDeviceEx来创建一个IDirect3DDevice9Ex对象,通过在DirectX提供的SDK的d3d9.h的文件中,查找IDirect3DDevice9Ex对象的Present函数所在函数列表的序号,如序号是17,通过该序号可以获取到Present函数的内存地址,即通过C++虚表函数地址获取,获取IDirect3DDevice9Ex对象的虚表指针的地址,从该地址加上17*4就可以获取到Present函数所在的内存地址。
步骤S2包括:
通过所述Hook模块在游戏进程中增加一个MyPresent函数;
通过系统Detours库的API函数使用所述Present函数的内存地址将MyPresent函数与游戏进程中的Present函数进行挂钩。
例如,(1)首先定义一个MyPresent函数用于调用Present函数:
static HRESULT WINAPI MyPresent(LPDIRECT3DDEVICE9 device,
THIS_CONST RECT*pSourceRect,
CONST RECT*pDestRect,
HWND hDestWindowOverride,
CONST RGNDATA*pDirtyRegion)。
其中,static HRESULT WINAPI MyPresent()表示MyPresent函数的声明,括号内表示其参数和返回值。其中,LPDIRECT3DDEVICE9device表示D3D9的设备指针,参数pSourceRect填入空值。参数pDestRect填入空值。参数hDestWindowOverride填入空值。参数pDirtyRegion填入空值。
(2)然后使用Detours库的API函数来对Present进行HOOK。
DetourAttach(system_present,MyPresent);此函数的意思是将系统的Present函数替换成MyPresent函数。其中system_present则为的Present函数的内存地址,即是步骤S1中获取到的Present函数的内存地址。
通过所述Hook模块在游戏进程中增加一个MyPresent函数包括:
通过所述Hook模块在游戏进程的内存空间中分配一个内存;
将MyPresent函数的磁盘路径写入到已经分配的内存中;
在游戏进程中创建一个线程,通过所述线程加载MyPresent函数的磁盘路径。
例如,通过VirtualAllocEx函数在游戏进程的内存空间中分配一个内存;
通过WriteProcessMemory来将MyPresent函数的磁盘路径写入到已经分配的内存中;
调用CreateRemoteThread函数来在游戏进程中创建一个线程,线程的执行逻辑就是调用LoadLibrary来加载步骤2中通过在游戏进程的内存空间中写入的磁盘路径。这样就实现了在游戏进程中开启一个线程,通过线程来加载MyPresent函数。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (10)
1.一种优化游戏进程CPU使用率的系统,其特征在于,包括:
地址获取模块,用于获取游戏进程中Present函数的内存地址;
Hook模块,用于在游戏进程中对所述Present函数增加一个MyPresent函数,使用所述Present函数的内存地址将所述Present函数与MyPresent函数进行挂钩;
sleep函数加入模块,用于对所述MyPresent函数增加一个sleep函数;所述sleep函数用于暂停Present函数的执行。
2.如权利要求1所述的一种优化游戏进程CPU使用率的系统,其特征在于:所述Hook模块包括函数加入单元和函数挂钩单元:
所述函数加入单元用于在游戏进程中对所述Present函数增加一个MyPresent函数;
所述函数挂钩单元用于通过系统Detours库的API函数使用所述Present函数的内存地址将MyPresent函数与游戏进程中的Present函数进行挂钩。
3.如权利要求1所述的一种优化游戏进程CPU使用率的系统,其特征在于:所述优化游戏进程CPU使用率的系统还包括时间参数设置模块,用于设置sleep函数的时间参数,所述时间参数为调用所述sleep函数暂停Present函数的时长。
4.如权利要求3所述的一种优化游戏进程CPU使用率的系统,其特征在于:所述时间参数为可调的。
5.如权利要求3所述的一种优化游戏进程CPU使用率的系统,其特征在于:所述时间参数为30毫秒。
6.一种采用如权利要求1-5任意一项所述的一种优化游戏进程CPU使用率的系统的优化游戏进程CPU使用率的方法,其特征在于,包括:
S1,通过所述地址获取模块获取游戏进程中Present函数的内存地址;
S2,通过所述Hook模块在游戏进程中对所述Present函数增加一个MyPresent函数,使用所述Present函数的内存地址将所述Present函数与MyPresent函数进行挂钩;
S3,通过所述sleep函数加入模块对所述挂钩函数增加一个sleep函数;所述sleep函数用于暂停Present函数的执行;
S4,通过所述时间参数设置模块设置sleep函数的时间参数,所述时间参数为调用所述sleep函数暂停Present函数的时长。
7.如权利要求6所述的一种优化游戏进程CPU使用率的方法,其特征在于:步骤S1包括:
通过所述地址获取模块查找Present函数在系统的DirectX提供的d3d9.h文件中的函数列表序号,通过该序号可以获取Present函数的内存地址。
8.如权利要求6所述的一种优化游戏进程CPU使用率的方法,其特征在于:步骤S2包括:
通过所述Hook模块在游戏进程中对所述Present函数增加一个MyPresent函数;
通过系统Detours库的API函数使用所述Present函数的内存地址将MyPresent函数与游戏进程中的Present函数进行挂钩。
9.如权利要求8所述的一种优化游戏进程CPU使用率的方法,其特征在于:通过所述Hook模块在游戏进程中增加一个MyPresent函数包括:
通过所述Hook模块在游戏进程的内存空间中分配一个内存;
将MyPresent函数的磁盘路径写入到已经分配的内存中;
在游戏进程中创建一个线程,通过所述线程加载MyPresent函数的磁盘路径。
10.如权利要求6所述的一种优化游戏进程CPU使用率的方法,其特征在于:所述时间参数为30毫秒。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611132053.4A CN106776022B (zh) | 2016-12-09 | 2016-12-09 | 一种优化游戏进程cpu使用率的系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611132053.4A CN106776022B (zh) | 2016-12-09 | 2016-12-09 | 一种优化游戏进程cpu使用率的系统及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106776022A true CN106776022A (zh) | 2017-05-31 |
CN106776022B CN106776022B (zh) | 2020-06-12 |
Family
ID=58879465
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611132053.4A Active CN106776022B (zh) | 2016-12-09 | 2016-12-09 | 一种优化游戏进程cpu使用率的系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106776022B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110691278A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 防止直播时外挂误判的方法、存储介质、电子设备及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060053309A1 (en) * | 2004-07-19 | 2006-03-09 | Vereen Jerry D | Optical network terminal with low-power sleep logic that substantially extends the life of the battery after the AC main power supply has been lost |
CN102663796A (zh) * | 2012-04-16 | 2012-09-12 | 广东威创视讯科技股份有限公司 | 一种开放图形库的动画处理方法和装置 |
CN103309748A (zh) * | 2013-06-19 | 2013-09-18 | 上海交通大学 | 云游戏中的gpu虚拟资源自适应调度宿主机系统和调度方法 |
CN104216783A (zh) * | 2014-08-20 | 2014-12-17 | 上海交通大学 | 云游戏中虚拟gpu资源自主管理与控制方法 |
CN104991775A (zh) * | 2015-07-03 | 2015-10-21 | 北京奇虎科技有限公司 | 一种游戏加速方法和装置 |
CN105072461A (zh) * | 2015-07-03 | 2015-11-18 | 北京奇虎科技有限公司 | 一种数据处理方法和装置 |
-
2016
- 2016-12-09 CN CN201611132053.4A patent/CN106776022B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060053309A1 (en) * | 2004-07-19 | 2006-03-09 | Vereen Jerry D | Optical network terminal with low-power sleep logic that substantially extends the life of the battery after the AC main power supply has been lost |
CN102663796A (zh) * | 2012-04-16 | 2012-09-12 | 广东威创视讯科技股份有限公司 | 一种开放图形库的动画处理方法和装置 |
CN103309748A (zh) * | 2013-06-19 | 2013-09-18 | 上海交通大学 | 云游戏中的gpu虚拟资源自适应调度宿主机系统和调度方法 |
CN104216783A (zh) * | 2014-08-20 | 2014-12-17 | 上海交通大学 | 云游戏中虚拟gpu资源自主管理与控制方法 |
CN104991775A (zh) * | 2015-07-03 | 2015-10-21 | 北京奇虎科技有限公司 | 一种游戏加速方法和装置 |
CN105072461A (zh) * | 2015-07-03 | 2015-11-18 | 北京奇虎科技有限公司 | 一种数据处理方法和装置 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110691278A (zh) * | 2018-07-05 | 2020-01-14 | 武汉斗鱼网络科技有限公司 | 防止直播时外挂误判的方法、存储介质、电子设备及系统 |
CN110691278B (zh) * | 2018-07-05 | 2022-02-22 | 武汉斗鱼网络科技有限公司 | 防止直播时外挂误判的方法、存储介质、电子设备及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106776022B (zh) | 2020-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7941688B2 (en) | Managing timers in a multiprocessor environment | |
US8751565B1 (en) | Components for web-based configurable pipeline media processing | |
DE112011101725T5 (de) | Sub-Puffer-Objekte | |
CN109726004B (zh) | 一种数据处理方法及装置 | |
CN110399214B (zh) | 一种优化显卡负载的方法、装置及计算机设备 | |
CN104050042A (zh) | Etl作业的资源分配方法及装置 | |
DE102022202554A1 (de) | Verfahren, einrichtungen und herstellungsartikel zum dynamischen zuweisen von cache | |
KR102668137B1 (ko) | 태스크들 및 작업 흐름들의 상태 비저장 병렬 프로세싱 방법 및 장치 | |
Dirand et al. | Tins: A task-based dynamic helper core strategy for in situ analytics | |
CN104216902A (zh) | 一种基于服务器分页的分页数据装载方法、装置和系统 | |
CN104462283A (zh) | 在移动终端中进行网页元素请求的方法、装置和客户端 | |
CN105511890B (zh) | 一种图形界面更新方法和装置 | |
Nguyen et al. | On the role of message broker middleware for many-task computing on a big-data platform | |
CN106020752A (zh) | 自适应显示方法及系统 | |
CN106776022A (zh) | 一种优化游戏进程cpu使用率的系统及方法 | |
CN111327941B (zh) | 一种离线视频播放方法、装置、设备及介质 | |
Markidis et al. | The EPiGRAM project: preparing parallel programming models for exascale | |
US9069594B1 (en) | Burst buffer appliance comprising multiple virtual machines | |
US11726758B2 (en) | Efficient scaling of a container-based application in a distributed computing system | |
CN103914299A (zh) | 一种Flash硬件加速控制方法及系统 | |
DE112023000088T5 (de) | Selektive kommunikationsschnittstellen für programmierbare teile | |
CN110673827A (zh) | 基于安卓系统的资源调用方法及装置、电子设备 | |
US20150066988A1 (en) | Scalable parallel sorting on manycore-based computing systems | |
DE102022126283A1 (de) | Nichtflüchtiger Speicher und Schnittstelle | |
US20140337856A1 (en) | Data parallel processing apparatus with multi-processor and method thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |