2009年5月2号,我们要结婚了
作者:淡月清风 日期:2009-04-23
将迅雷狗狗搜索添加到Google搜索工具栏上的方法
作者:淡月清风 日期:2009-04-22
1.在Google搜索工具栏上随便添加一个按钮。
打开Google搜索工具栏的选项界面,点击“添加更多按钮”,在出现的页面上随便添加一个
按钮(比如“农历”):

2.再次打开“选项”界面,切换到“自定义按钮选项卡”,单击“农历”后的“修改,再点高级:

3.点击“高级”,并用如下代码替换文本框中原有的代码:
- <?xml version="1.0" encoding="utf-8"?>
- <custombuttons xmlns="http://toolbar.google.com/custombuttons/">
- <button>
- <search charset="gb2312">http://www.gougou.com/search?search={query}&id=1</search>
- <site>http://www.gougou.com/</site>
- <title>狗狗</title>
- <description>狗狗搜索</description>
- </button>
- </custombuttons>
4.单击“保存到Google工具栏...”即可。
CAsyncSocket的一个简单应用
作者:淡月清风 日期:2009-04-22
对于任意的类A,都只需要继承自CClientSocketEvent,并实现CClientSocketEvent类中的
virtual void OnClose(int nErrorCode);
virtual void OnConnect(int nErrorCode);
virtual void OnReceive(int nErrorCode);
这三个方法即可简单方便的使用CAsyncSocket类。
类A就可以通过CClientSocketEvent的成员m_pClientSocket来进行Socket操作。
示例代码片段:
//CMainDlg同时继承CDialog和CClientSocketEvent
class CMainDlg : public CDialog,CClientSocketEvent
{...}
//在CMainDlg的方法中可以这样开始连接服务器
m_pClientSocket->StartConnect("www.baidu.com",80);
完整的源代码如下:
Tags: 代理模式 CAsyncSocket 简单应用
使用内存映射文件来快速保存数据到文件
作者:淡月清风 日期:2009-04-20
BOOL SaveNewFile( IN LPCTSTR lpNewFilePath,IN PBYTE lpbData,IN DWORD dwFileSize )
{
HANDLE _w_hFile=INVALID_HANDLE_VALUE;
HANDLE _w_hFileMap=NULL;
PBYTE _w_lpbFile=NULL;
_w_hFile=CreateFile(
lpNewFilePath,//路径
GENERIC_WRITE|GENERIC_READ,//写
0 ,//共享类型0
NULL,//文件的安全特性
Create_ALWAYS,//创建文件,会改写前一个文件
FILE_FLAG_SEQUENTIAL_SCAN,//针对连续访问对文件缓冲进行优化
NULL);//如果不为零,则指定一个文件句柄
if (INVALID_HANDLE_VALUE==_w_hFile)
{
TRACE("CreateFile:GetLastError()=%d\n",GetLastError());
return FALSE;
}
_w_hFileMap = CreateFileMapping(
_w_hFile,
NULL, //安全对象
PAGE_READWRITE,//以读写方式打开映射
0,
dwFileSize,
NULL);//指定文件映射对象的名字
if (NULL==_w_hFileMap)
{
TRACE("CreateFileMapping:GetLastError()=%d\n",GetLastError());
return FALSE;
}
_w_lpbFile = (PBYTE) MapViewOfFile(
_w_hFileMap,
FILE_MAP_WRITE,
0,
0, //映射的大小
0);//零表示允许windows寻找地址
if (NULL==_w_lpbFile)
{
TRACE("MapViewOfFile:GetLastError()=%d\n",GetLastError());
return FALSE;
}
memcpy(_w_lpbFile,lpbData,dwFileSize);
//这个memcpy导致性能骤减为CFile::Write的水平,郁闷
if (!FlushViewOfFile(_w_lpbFile,0))
{
TRACE("FlushViewOfFile:GetLastError()=%d\n",GetLastError());
return FALSE;
}
UnmapViewOfFile(_w_lpbFile);
CloseHandle(_w_hFileMap);
CloseHandle(_w_hFile);
_w_hFile=INVALID_HANDLE_VALUE;
_w_hFileMap=NULL;
_w_lpbFile=NULL;
return TRUE;
}
性能测试:
P42.8双核+1G内存+希捷IDE接口80G硬盘,写入10M数据平均需要220毫秒!
#define SIZE 1024*1024*10
char *s=new char[SIZE];//10M
SaveNewFile("test.bin",(PBYTE)s,SIZE);







