win7下打开chm文件失败,显示页面无法显示

有时候需要打开chm文档,在XP系统中能正常打开,但装了win7系统后,发现无法打开chm文档,显示页面无法显示,或显示已取消到该网页的导航,这是因为win7的安全性问题,其实解决方法很简单,右键chm文件,选择属性,会看到如下图所示对话框。
Continue reading ‘win7下打开chm文件失败,显示页面无法显示’ »

如何卸载Mcafee

装Mcafee容易,但卸载却是很难的,Mcafee不提供安装卸载,需要使用专门的方法来卸载。

在网上有一种方法,是使用Mcafee提供的卸载工具,但这个只对专业版或者是个人版有用,对企业版无效,企业的卸载需要使用下面的方法:

把注册表里的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\McAfee Framework
HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates\TVD
HKEY_LOCAL_MACHINE\SOFTWARE\Network Associates\ePolicy Orchestrator
删除后,重新启动机器,再用安装程序选择remove就可以删除了。

Win7系统休眠和睡眠的区别

不管是睡眠还是休眠,简单的说,都是为计算机节能而设置的,就是在你离开计算机时,停止一些计算机的运行,包括电源的供电,如果你的电脑是笔记本,那么合理的设置,在你移动办公时离开一段时间后,计算机可以根据设定的时间去实现睡眠、休眠或者关机等动作,当再次打开时,还能够快速进入到工作状态。也就是说,同样具有的睡眠和休眠,在台式机和笔记本上,其实现的最终效果不尽相同,比如在笔记本上我们可以设置为”当盖上屏幕时”的动作是什么,而在台式机上就没有。

休眠(Hibernate),将系统切换到该模式后,系统会自动将内存中的数据全部转存到硬盘上一个休眠文件中,然后切断对所有设备的供电。这样当恢复的时候,系统会从硬盘上将休眠文件的内容直接读入内存,并恢复到休眠之前的状态。这种模式完全不耗电,因此不怕休眠后供电异常,但代价是需要一块和物理内存一样大小的硬盘空间(好在现在的硬盘已经跨越TB级别了,大容量硬盘越来越便宜)。而这种模式的恢复速度较慢,取决于内存大小和硬盘速度,一般都要1分钟左右,甚至更久。

睡眠(Sleep),是Windows Vista中的新模式,这种模式结合了待机和休眠的所有优点。将系统切换到睡眠状态后,系统会将内存中的数据全部转存到硬盘上的休眠文件中(这一点类似休眠),然后关闭除了内存外所有设备的供电,让内存中的数据依然维持着(这一点类似待机)。这样,当我们想要恢复的时候,如果在睡眠过程中供电没有发生过异常,就可以直接从内存中的数据恢复(类似待机),速度很快;但如果睡眠过程中供电异常,内存中的数据已经丢失了,还可以从硬盘上恢复(类似休眠),只是速度会慢一点。不过无论如何,这种模式都不会导致数据丢失。

总之,休眠是不耗电的,睡眠内存还在工作。

Windows下C++生成全局唯一GUID

有些时候,需要使用全局唯一的GUID,其实在windows环境中,windows的API提供了生成GUID的函数,即CoCreateGuid,需要引入头文件objbase.h

具体的生成代码如下:
[php]
#include <objbase.h>
#include <stdio.h>

//–生成GUID
const char* GenerateGUID()
{
static char buf[64] = {0};
GUID guid;
if (S_OK == ::CoCreateGuid(&guid))
{
_snprintf(buf, sizeof(buf)
, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"
, guid.Data1
, guid.Data2
, guid.Data3
, guid.Data4[0], guid.Data4[1]
, guid.Data4[2], guid.Data4[3], guid.Data4[4], guid.Data4[5]
, guid.Data4[6], guid.Data4[7]
);
}
return (const char*)buf;
}

int main()
{
//–COM
CoInitialize(NULL);

printf(GenerateGUID());
printf("\r\n");

//–COM
CoUninitialize();

return 0;
}
[/php]
运行结果如下图:
1

boost的日期时间处理

在c++中获取日期时间比较简单,但如果需要对日期间进行更复杂的使用就有点力不从心了,比如:

1.要计算从2013-07-10 14:33:00到2013-09-28 11:11:30之间的天数、小时数、分钟数、秒数。

2.或者要计算从2013-07-10 14:33:00开始,过了218天30小时14分钟30秒后的时间。

下面来介绍Boost.Date_Time的简单使用。

boost的日期操作需要引入头文件

[php]
#include "boost/date_time/gregorian/gregorian.hpp"
[/php]

时间操作需要引入头文件

[php]
#include "boost/date_time/posix_time/posix_time.hpp"
[/php]

Continue reading ‘boost的日期时间处理’ »

使用nitrous在线编译器创建socket.io服务

node.js提供了高效的服务端运行环境,但是由于浏览器端对HTML5的支持不一,为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程体验,于是socket.io诞生。

socket.io设计的目标是支持任何的浏览器,任何Mobile设备。目前支持主流的PC浏览器 (IE,Safari,Chrome,Firefox,Opera等),Mobile浏览器(iphone Safari/ipad Safari/android WebKit/WebOS WebKit等)。socket.io基于node.js并简化了WebSocket API,统一了通信的API。它支持:WebSocket, Flash Socket, AJAX long-polling, AJAX multipart streaming, Forever IFrame, JSONP polling。

socket.io解决了实时的通信问题,并统一了服务端与客户端的编程方式。启动了socket以后,就像建立了一条客户端与服务端的管道,两边可以互通有无。socket.io的下载地址是http://socket.io/,下面介绍nitrous在线编译器创建socket.io服务的过程。

nitrous提供的云编译器,支持多种语言,参考https://www.zoudaokou.com/index.php/archives/227中介绍的编译器注册创建步骤,创建一个Node.js的环境,然后在最下方的Linux命令终端输入以下命令来安装socket.io包。
[php]
npm install socket.io
[/php]
Continue reading ‘使用nitrous在线编译器创建socket.io服务’ »

使用nitrous在线编译器创建node.js服务

Node.js是一套用来编写高性能网络服务器的JavaScript工具包,为JavaScript搭建服务器提供了可能,不再是C++或其它语言的专利。下面介绍的是一款免费在线IDE,创建简单服务的过程,监听端口接收浏览器发来的数据。

nitrous提供的云编译器,支持多种语言,参考https://www.zoudaokou.com/index.php/archives/227中介绍的编译器注册创建步骤,创建一个Node.js的环境,然后打开界面,创建一个server.js的文件,文件内容如下

[php]
var http = require("http");

http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8080);
[/php]
Continue reading ‘使用nitrous在线编译器创建node.js服务’ »

nitrous在线编译器,支持C、C++、Java、Ruby、Python、Go、Node.js

最近发现一款非常好用的在线编译器,Linux开发环境,支持Linux在线命令执行,支持几种常见的语言在线编译运行。支持git命令,能够从git上下载工程,网址是http://www.nitrous.io/

进入网站后需要注册一个帐号,并使用邮箱激活才能正常使用,注册非常简单,30秒可以搞定,激活邮箱后,登陆到页面,会提示你创建一种编程语言,一个帐号只能免费创建一种,要想创建多个,需要邀请好友获取N2O积分,用积分换语言。

下面图中是我已经创建了一个Go语言编程环境的,点击New Box可以创建一个新的编程环境。


Continue reading ‘nitrous在线编译器,支持C、C++、Java、Ruby、Python、Go、Node.js’ »

vs2005调用ffmpeg库执行av_register_all出错崩溃

今天下载了1.2版本的FFmpeg库,在官方网站有一个链接,可以下载到编译好的windows版本的库。下载下来后,写了一段程序,在main函数中执行到函数av_register_all(),直接崩溃,提示Unhandled exception at 0x00905a51 in main.exe: 0xC000001D: Illegal Instruction,工程是Release版本的,调用代码如下:

[php]
#include <stdio.h>

#include <libavformat/avformat.h>
#include <libavutil/dict.h>

int main (int argc, char **argv)
{
AVFormatContext *fmt_ctx = NULL;
AVDictionaryEntry *tag = NULL;
int ret;

if (argc != 2) {
printf("usage: %s <input_file>\n"
"example program to demonstrate the use of the libavformat metadata API.\n"
"\n", argv[0]);
return 1;
}

av_register_all();
if ((ret = avformat_open_input(&fmt_ctx, argv[1], NULL, NULL)))
return ret;

while ((tag = av_dict_get(fmt_ctx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX)))
printf("%s=%s\n", tag->key, tag->value);

avformat_close_input(&fmt_ctx);
return 0;
}
[/php]
Continue reading ‘vs2005调用ffmpeg库执行av_register_all出错崩溃’ »

循环赛日程安排分治法分析

问题描述:

  • 设有n(n = 2^k)位选手参加网球循环赛,循环赛共进行n-1天,每位选手要与其他n-1位选手比赛一场,且每位选手每天必须比赛一场,不能轮空。试按此要求为比赛安排日程。

编程思想:

假设n位选手被顺序编号为1,2,3,…,n,比赛的日程表是一个n行n-1列的表格,i行j列的表格内容是第i号选手在第j天的比赛对手。根据分而治之的原则,可从其中一半选手(2^(n-1位)的比赛日程,导出全体n位选手的日程,最终细分到只有两位选手的比赛日程出发。可假设只有8位选手参赛,若1至4号选手之间的比赛日程填在日程表的左上角(4行3列),5至8号选手之间的比赛日程填在日程表的左下角(4行3列);那么左下角的内容可由左上角的对应项加上数字4得到。至此,剩余的右上角(4行4列)是为编号小的1至4号选手与编号大的5至8号选手之间的比赛日程安排。例如,在第4天,让1至4号选手分别与5至8号选手比赛,以后各天,依次由前一天的日程安排,让5至8号选手“循环轮转”即可。最后,比赛日程表的右下角的比赛日程表可由,右上角的对应项减去数字4得到。

具体实现:
Continue reading ‘循环赛日程安排分治法分析’ »