- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章使用C++制作GC Server过程详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
最近很多人找我要GC Server的源代码。我跟他们讲环境要求的时候,很多人都不以为然,结果最后仅仅测试程序就报了几千个Error。所以,我决定今天讲一下如何搭建你自己的GC Server。(目前还没有一个人成功,请量力而行,如果成功了记得在评论区告诉我~) 。
步骤 。
1. 系统配置 。
本文仅适用于Windows系统,支持Win7及以后的大部分版本,Win10最佳.
2. 环境配置 。
首先,你需要一个支持C/C++的IDE(强烈推荐Visual Studio,后面的操作会更方便),然后你需要下载一个图形库,比如WinAPI。最后你需要将图形库安装到你的IDE的配置里面,将include和lib都装到要求的文件夹里,这就不必多说了,如果有问题请在评论区说明.
3. 编译测试 。
注意!在此步骤下如果出现任何系统错误,请立即停止操作!推荐在开始前将系统进行备份! 。
Step 1 - 创建项目 。
在这一步里,需要你在你的IDE里创建一个C/C++的项目,确保创建正常且Hello world可以运行。(我精心帮你准备好了测试用的Hello World代码^_^) 。
1
2
3
4
5
6
|
using
namespace
std;
int
()
{
cout<<
"Hello,world!"
<<endl;
return
0;
}<br>
|
1
2
3
4
5
6
7
|
//C
#include <stdio.h>
int
()
{
printf
(
"Hello,world!n"
);
return
0;
}
|
Step 2 - 图形库测试 。
你需要include你之前引入的图形库的头文件,然后再设置一下比如这样:
1
2
3
4
5
6
7
8
9
10
11
12
|
#include <graphics.h> // 引用图形库头文件
#include <conio.h>
int
()
{
initgraph(640, 480);
// 创建绘图窗口,大小为 640x480 像素
setlinecolor(RGB(255, 0, 0));
// 设置当前线条颜色
setfillcolor(RGB(0, 255, 0));
// 设置当前填充颜色
fillcircle(200, 200, 100);
// 画圆,圆心(200, 200),半径 100
system
(
"pause"
);
// 按任意键继续,getch();亦可
closegraph();
// 关闭图形环境
return
0;
}
|
如果上面的代码你可以运行成功,那么恭喜你,你可以进入下面的步骤了~ 。
Step 3 - 按钮制作 。
很多人看到图形库的功能后都很吃惊,但是也有人问我,GC Server里面的那些不同颜色的按钮时怎么画出来的。因为,图形库好像没有自带画按钮的功能啊~ 。
很简单,如下:
(下方代码为GC Server 8.7最后更新的源代码片段,为防止数据泄露,我们没有采用最新版本的代码,且在原版本的基础上做了部分处理,不影响代码的理解) 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
settextstyle(90, 0, _T(
"楷体"
));
setbkcolor(RED);
outtextxy(20, 160, _T(
"欢迎您使用 GC Server!"
));
setbkcolor(BLUE);
settextstyle(38, 0, _T(
"楷体"
));
outtextxy(124, 301, _T(
"快速注册"
));
rectangle(120, 300, 280, 340);
outtextxy(404, 301, _T(
"程序信息"
));
rectangle(400, 300, 560, 340);
outtextxy(684, 301, _T(
"立即登录"
));
rectangle(680, 300, 840, 340);
MOUSEMSG m;
while
(
true
)
{
m = GetMouseMsg();
if
(m.x >= 120 && m.x <= 280 && m.y >= 300 && m.y <= 340)
{
if
(m.uMsg == WM_LBUTTONDOWN)
{
//此处为注册代码,安全起见被删除
}
else
{
settextstyle(35, 0, _T(
"楷体"
));
outtextxy(130, 302, _T(
"快速注册"
));
}
}
else
if
(m.x >= 400 && m.x <= 560 && m.y >= 300 && m.y <= 340)
{
if
(m.uMsg == WM_LBUTTONDOWN)
{
//此处为程序信息代码,安全起见被删除
}
else
{
settextstyle(35, 0, _T(
"楷体"
));
outtextxy(410, 302, _T(
"程序信息"
));
}
}
else
if
(m.x >= 680 && m.x <= 840 && m.y >= 300 && m.y <= 340)
{
if
(m.uMsg == WM_LBUTTONDOWN)
{
//此处为登录代码,安全起见被删除
}
else
{
settextstyle(35, 0, _T(
"楷体"
));
outtextxy(690, 302, _T(
"立即登录"
));
}
}
else
{
settextstyle(38, 0, _T(
"楷体"
));
outtextxy(124, 301, _T(
"快速注册"
));
outtextxy(404, 301, _T(
"程序信息"
));
outtextxy(684, 301, _T(
"立即登录"
));
}
}
|
代码的思路:先把按钮画出来,然后再判定鼠标动作。如果鼠标再指定区域内且左键单击,就说明用户点击了按钮.
当然了,你还可以搞些小花样,比如说我之前做的lock项目(电脑安全锁)就用到了鼠标手势代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
MOUSEMSG m2;
int
flag1 = 0, flag2 = 0;
settextstyle(20, 0, _T(
"楷体"
));
rectangle(600, 500, 650, 530);
outtextxy(605, 505, _T(
"确定"
));
while
(
true
)
{
m2 = GetMouseMsg();
if
(m2.x >= 600 && m2.x <= 650 && m2.y >= 500 && m2.y <= 530)
{
settextstyle(25, 0, _T(
"Consolas"
));
if
(m2.uMsg == WM_MBUTTONDBLCLK)
{
flag1 = 1;
continue
;
}
else
if
(m2.uMsg == WM_LBUTTONDOWN && flag1 == 1)
{
flag2 = 1;
continue
;
}
else
if
(m2.uMsg == WM_RBUTTONDOWN && flag2 == 1)
{
break
;
}
else
{
settextstyle(22, 0, _T(
"楷体"
));
outtextxy(603, 503, _T(
"确定"
));
}
}
else
{
settextstyle(20, 0, _T(
"楷体"
));
outtextxy(605, 505, _T(
"确定"
));
}
}
|
上述代码就是要先双击鼠标中键的滚轮(向下按),然后再左键一次右键一次即可.
Step 4 - 添加游戏 。
游戏可以直接在GC Coding发帖,我会回复的。目前来说,大部分在GC Server目前版本已经开放的游戏代码都可以直接找我要.
Step 5 - 设计插件更改模块 。
你需要在Github上开一个repo,然后把你想用的插件打包传上去,用户想下载的时候,只需要用system调用打开浏览器访问指定网址,然后提示用户将下载的包放到安装目录中,再点击某个神奇的按钮后程序就自动开始解析用户下载的包,然后把文件加到下载目录里去。程序再修改一个安装目录下的文件,比如把0改成1,然后开始加载这个插件.
一般来说用户比较喜欢有卸载功能的插件,这个也很简单,只需要加上一个卸载按钮,一旦用户点击确定后就删除包,然后把上面说的文件再改回去即可.
还可以再repo里加一个README,在程序里加一个说明,一点就打开README的网址,这也不难.
Step 6 - 加入一部分彩蛋 。
好吧,其实这一步是选做的不过我认为一个程序要更有意思就应该加入一些彩蛋。比如GC Server最近促使我添加“姓名登录”的一个较为重要的原因就是想藏彩蛋。比如你输入某些神奇的名字~~ 够了不泄密了… 。
Step 7 - 完工 。
好的,如果你已经按照前面的步骤顺利完成了,生成exe文件的时候就到了。不出意外的话(这几乎是不可能的),你会看到exe文件已经在项目文件夹里等着你了。当然,如果出现了不能解决的错误,也欢迎你来留言哦~ 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://code004.ml/posts/make-your-own-gc-server-with-cpp/ 。
最后此篇关于使用C++制作GC Server过程详解的文章就讲到这里了,如果你想了解更多关于使用C++制作GC Server过程详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
在我们对延迟敏感的应用程序中,我们有缓存数据(驻留在 TG 中)和在 YG 中消亡的短暂对象。我已经看到次要 GC 时间和主要 GC 时间有显着差异。我怀疑这与TG的尺寸相对较大有关。谁能解释 GC
我看到了多个建议运行 GC.Collect(GC.MaxGeneration) 的答案。 既然方法GC.Collect()会收集所有存在的分代,那么两者有什么区别吗? 也许如果只有两代而不是三代,GC
我们正在使用 UseParallelGC。 GC 日志看起来像 2016-06-09T19:38:17.362+0000:655312.397:[完整GC(人体工程学)[PSYoungGen:2291
我最近看到了两个非常好的和有教育意义的语言讲座: This first one由 Herb Sutter 撰写,介绍了 C++0x 的所有漂亮和酷炫的特性,为什么 C++ 的 future 似乎比以往
我们正在运行 gerrit 2.10.7,我们偶尔会遇到损坏的对象没有被 gerrit gc 修复的问题,即使 git gc 可以很好地修复它们。 另一方面,我读到 gerrit gc 会创建优化其他
我试图避免 Full GC(来自下面的 gc.log 示例)在生产中的 Tomcat 中运行 Grails 应用程序。关于如何更好地配置 GC 有什么建议吗? 14359.317:[完整 GC 143
我试图通过在析构函数中使用 console.WriteLine() 来确保释放某个类的实例,但输出从未出现。 我仔细搜索了任何挥之不去的引用资料以及事件订阅,但没有找到。只是为了我自己的理智,在我继续
之前看过一篇文章,说FGC影响时序,导致application出错结果。 代码示例如下: long start = System.currentTimeInMillis(); doSomething(
在 Java 中,我们可以使用 System.gc() 方法来建议 GC。今天我从this link开始了解C#中的GC.Collect()方法。 . 但我对解释有些不清楚。 第一行。 Forces
我理解 Python GC 有两种工作方式: 1) 基本引用计数 - 当“name”设置为“Tom”时,“John”下方的引用计数为零 name = "John" name = "Tom" (Refe
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
今天我们使用并发标记清除,具体如下: -XX:+UseConcMarkSweepGC 我看到一些文章推荐使用这种形式的附加参数: -XX:+UseConcMarkSweepGC -XX:+CMSInc
当我运行我的程序时,logcat 显示很多 GC Activity 喜欢 GC freed 10324 objects/ 510376 bytes in 103 ms GC freed 10324 o
2013-11-26T10:19:30.011+0800: [GC [ParNew: 2432484K->19997K(2696640K), 0.0378270 secs] 5560240K->315
在执行 GC 时,JVM 会遍历 Activity 对象,并清除未标记的对象。 根据: How to Tune Java Garbage Collection “Full GC的执行时间相对Minor
我有一个分布式缓存应用程序(内存绑定(bind),由于与集群中其他节点的交互而具有网络 I/O)在 JVM 1.7.0_51 中运行,带有 G1 垃圾收集器。这是 JVM 配置: -server -X
首先,我想让您知道,这是一个理论问题而不是实际问题,我只是好奇弱引用对象是如何被释放的。让我们快速记住 Java 中的弱引用是什么。粗略地说WeakReference意味着当没有指向“我”的强引用时,
这是运行大约 10 分钟后的输出。 Heap PSYoungGen total 7040K, used 0K [0x24060000, 0x247c0000, 0x26790000)
我正在运行一个应用程序,在 Weblogic 上使用 java 5 和 CMS 垃圾收集器。在垃圾收集日志中,我看到了消息日志,其中大部分消息我可以使用 Sun 的 Java HotSpot 虚拟机中
我有一个 ConcurrentMap> map = new ConcurrentHashMap>(); 并且希望当 SoftReference 的引用被 GC 时从映射中删除键/值对。 我该如何实现这
我是一名优秀的程序员,十分优秀!