_beginthread和CreatThread的区别

我们知道在Windows下创建一个线程的方法有两种,一种就是调用Windows API CreateThread()来创建线程;另外一种就是调用MSVC CRT的函数_beginthread()或_beginthreadex()来创建线程。相应的退出线程也有两个函数Windows API的ExitThread()和CRT的_endthread()。这两套函数都是用来创建和退出线程的,它们有什么区别呢?

很多开发者不清楚这两者之间的关系,他们随意选一个函数来用,发现也没有什么大问题,于是就忙于解决更为紧迫的任务去了,而没有对它们进行深究。等到有一天忽然发现一个程序运行时间很长的时候会有细微的内存泄露,开发者绝对不会想到是因为这两套函数用混的结果。
继续阅读 »

赛车游戏最快记录中由亡父“幽灵”保持,xbox玩家不忍打破纪录

英美等国家的父亲节是6月的第三个周日,国外一名6岁时丧父的网友,日前找出小时候与父亲一起玩的Xbox游戏机,在“拉力赛”游戏中发现“亡父的身影”,他的文章也感动许多往网友。

美国电竞节目PBS上月22日在YouTube询问“电子游戏能成为心灵体验吗?”网名为“00WARTHERAPY001”的网友在视频底下留言说,4岁时父亲买了一台Xbox,父子俩因此度过一段美好的日子,但6岁时父亲不幸去世。

图为赛车游戏截图,“幽灵”车为父亲在网友幼时的游戏记录。

“往后10年我没办法碰这台游戏机”网友表示,直到最近他才发现,父子俩过去常玩的《越野挑战赛》(Rally Sports Challenge)中,父亲是最佳纪录保持人,在这款游戏的中,纪录保持者将以“幽灵车手”之姿与玩家竞赛。

经过多次在游戏中与父亲竞赛后,网友终于有机会能打破父亲纪录,但他最后选择在终点线前停下来,避免破纪录后再也看不到父亲,让父亲的身影永远保存在游戏中。

继续阅读 »

感人肺腑!少年在Xbox中与逝去的父亲重逢

近日,网名00WARTHERAPY00的网友在YouTube上发表评论文章,讲述了自己的故事:“当我四岁的时候,我的父亲买了一台Xbox。你知道的,就是那个2001年发售的第一款,大块结实的机子。我们一起玩了各种游戏,玩得非常非常高兴——直到他去世,当时我才6岁。足足10年,我没敢碰那台机子。但是当我最后又拿起它,我发现了一点东西。”

“我们当时常玩一款赛车游戏,叫《拉力挑战赛》。这款游戏当时是非常棒的作品。当我开始玩弄起来的时候,我发现了一个幽灵!你没看错。你知道的,在进行计时赛的时候,单场最快纪录的保持者会被游戏录下来作为幽灵车。没错,你们猜到了——我父亲的幽灵车直到今天都还在赛道上驰骋。所以我不断玩这款游戏,直到我差一点就能击败幽灵车。而最后有一天我超过了它,随后……”

“我在终点线前停住了车,只是为了我的新纪录不覆盖掉父亲的幽灵车。”
继续阅读 »

C++中GB2312字符串和UTF-8之间的转换

在编程过程中需要对字符串进行不同的转换,特别是Gb2312和Utf-8直接的转换。在几个开源的魔兽私服中,很多都是老外开发的,而暴雪为了能 够兼容世界上的各个字符集也使用了UTF-8。在中国使用VS(VS2005以上版本)开发基本都是使用Gb2312的Unicode字符集,所以当在编 程过程中就需要进行字符转换,这样才能兼容游戏,否则就是乱码。而在控制台显示字符串时,真好相反需要将UTF-8的字符串转换成Gb2312才能正常显 示。

为了解决这个问题,本人将其代码贴出来;其实很多地方都可以使用到字符串的编码转换,代码如下:

无论是GB2312到UTF-8的转换,还是UTF-8到GB2312的转换,都需要注意的是在使用字符串后,需要删除字符串指针;

如何把GIT仓库的子目录独立为子模块

最近在给考拉山后台添砖加瓦的过程中,发现了两个问题:

  • 对于当前的同一套逻辑,我已经有4个view层工作在上面了,马上还要再加上一个view,专门用来显示分享出去的页面;
  • 接下来还要再加上同步evernote这种异步任务;
  • 而现在这些代码都还在同一个GIT仓库中;

这种混乱的场景已经快让我不能忍了,于是乎决定把这个大仓库中的所有businessmodel的代码独立到一个submodule中,这样接下来就可以进一步的拆分各个view让它们都引用这个submodule

还好之前的代码结构还算比较好,所有businessmodel的代码都在一个名为coloshine的目录中,所以接下来只要解决如何把一个子目录独立成一个submodule并且保存分支和提交历史这个问题就好了。
继续阅读 »

静态库与动态库相互调用

测试场景,Test,lib1,lib2,dll1,dll2,分为下面四种情况:
1、Test->lib1->lib2
lib1编译自己的代码,对lib2的部分,只需要lib2的头文件,对lib2的代码实现,使用占位符关联。
生成Test连接的时候,把lib1的代码实现包含进来,再递归,把lib1中关联lib2的代码实现也包含进来。
运行Test的时候,不再需要lib1和lib2。

2、Test->lib1->dll2
lib1编译自己的代码,对dll2的部分,只需要dll2的头文件,对dll2的代码实现,使用占位符关联。
生成Test连接的时候,把lib1的代码实现包含进来,但是,dll2中的代码不包含进来。
运行Test的时候,不需要lib1,但是需要dll2【不需要dll的lib文件】

3、Test->dll1->lib2
dll1编译自己的代码,对lib2的部分,需要lib2的头文件和实现,即lib2,把lib2的代码实现包含到dll1中
生成Test连接的时候,dll1中的代码不包含进来,并且不再需要lib2。
【可以这样测试,生成lib2,生成dll1,生成test.exe,删除lib2,删除test.exe,再生成test.exe,可以生成成功。说明生成test.exe,连接的时候根本不需要lib2,。也就是说,静态库会被连接到动态库或者exe中,但是不会被连接到其他的静态库中】
运行Test的时候,需要dll1,但是不需要lib2

4、Test->dll1->dll2
dll1编译自己的代码,对dll2的部分,需要dll2的头文件和lib文件,对dll2的代码实现,使用占位符关联。
生成Test连接的时候,Test需要dll1的lib,dll1需要dll2的lib,但是代码实现都不会包含在Test中。
运行Test的时候,需要dll1和dll2【不需要他们的lib】

VS2017多版本VC支持

前言

研究目标:VS2017作为目前最新的IDE,让其支持所有版本的VC编译环境

必要性:报建通依赖的特定版本的AutoCAD作为“宿主”环境,作为一个通用产品,就需要支持所有的AutoCAD版本。现在AutoCAD版本需要支持的版本有AutoCAD 2005-2015,其中从AutoCAD 2010开始支持x64,按照一般情况,就需要针对每一个版本安装一个对应的Visual Studio IDE版本,这样给“环境的搭建”、“项目工程的管理”带来很大的挑战和负担

难点:目前每个Visual Studio集成编译环境仅支持对应版本的工程,且作为微软闭源的产品,不支持人为配置
继续阅读 »

Qt 5.10.1 & vs2017 静态编译

  • 2018-03-05

准备:

1、源代码&编译器

继续阅读 »

libuv 在win10 vs各个版本编译静态库

01 环境

libuv使用git管理代码,使用gyp管理工程文件。git、python2.x必须。
环境描述:
win10x64企业版本(10.0.14393),
vs2005–vs2015,
python2.7.6,
git(version 1.9.5.chromium.6)。
git和python建议使用更高版本。
因为下载gyp管理工具需求翻墙,需要vpn。自己有美国的vps,可以自己搭建。
官网:http://libuv.org/
github源码:https://github.com/libuv/libuv

02 源码下载

命令提示符窗口输入:
继续阅读 »

牢记25个最佳的SSH命令

OpenSSH是SSH连接工具的免费版本。telnet,rlogin和ftp用户可能还没意识到他们在互联网上传输的密码是未加密的,但SSH是加密的,OpenSSH加密所有通信(包括密码),有效消除了窃听,连接劫持和其它攻击。此外,OpenSSH提供了安全隧道功能和多种身份验证方法,支持SSH协议的所有版本。

SSH是一个非常伟大的工具,如果你要在互联网上远程连接到服务器,那么SSH无疑是最佳的候选。下面是通过网络投票选出的25个最佳SSH命令,你必须牢记于心。

(注:有些内容较长的命令,在本文中会显示为截断的状态。如果你需要阅读完整的命令,可以把整行复制到您的记事本当中阅读。)
继续阅读 »