Archive for 7月 2013

Win7系统休眠和睡眠的区别

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

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

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

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

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

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

具体的生成代码如下:

#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;
}

运行结果如下图:
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的日期操作需要引入头文件

#include "boost/date_time/gregorian/gregorian.hpp"

时间操作需要引入头文件

#include "boost/date_time/posix_time/posix_time.hpp"

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提供的云编译器,支持多种语言,参考http://www.zoudaokou.com/index.php/archives/227中介绍的编译器注册创建步骤,创建一个Node.js的环境,然后在最下方的Linux命令终端输入以下命令来安装socket.io包。

npm install socket.io

Continue reading ‘使用nitrous在线编译器创建socket.io服务’ »