placement new(转)
摘要:今天看STL源码遇到一个问题:template <class _T1, class _T2>inline void _Construct(_T1* __p, const _T2& __value) { new ((void*) __p) _T1(__value);}上网搜到了一些文章,分享了:原帖地址: http://www.ksarea.com/articles/20080124_cc.htmlplacement new释疑"placement new"? 它到底是什么东东呀?我也是最近几天才听说,看来对于C++我还差很远呀!placement new
阅读全文
posted @
2012-04-06 10:57
莫水千流
阅读(552)
推荐(1) 编辑
C++ new 解析重载 .
摘要:C++ new用法之一 new运算符最常用的是作为运算符的new,比如:string *str = new string(“test new”);作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。new会在堆上分配一块内存,并会自动调用类的构造函数。C++ new用法之二 new函数第二种就是new函数,其实new运算符内部分配内存使用的就是new函数,原型是:void *operator new(size_t size);new函数返回的是一个void指针,一块未经初始化的内存。如你所见,这和C语言的malloc行为相似,你可以重载new函数,并且增加
阅读全文
posted @
2012-04-06 10:11
莫水千流
阅读(6464)
推荐(1) 编辑
程序只运行一个是实例 .
摘要:#define UNIQE_NAME "{1AB792D6-EAF2-3267-9A84-9135681127A4}"#define GIS_MSG "{D48CA993-4925-41cb-8F59-ABAAAFCEF797}"const UINT ID_GIS_INSTANCE = ::RegisterWindowMessage(GIS_MSG);//注册消息// 确保程序只有一个实例在运行m_hOneInstance = ::CreateMutex(NULL, FALSE, UNIQE_NAME);if (GetLastError() == ERR
阅读全文
posted @
2012-04-02 17:03
莫水千流
阅读(197)
推荐(0) 编辑
关机程序 .
摘要:OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构 OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&OsVersionInfo); //获取操作系统版本信息 if(OsVersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) { //Windows98,调用ExitWindowsEx()函数重新启动计算机 DWORD dwReserved; Exit...
阅读全文
posted @
2012-04-02 17:02
莫水千流
阅读(425)
推荐(0) 编辑
__cdecl,__fastcall, __stdcall 什么区别? .
摘要:函数参数入栈的方式 --------------------------------------------------------------- 在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。 比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,其它两个可以看MSDN,不过这个对我们编程没有太大的作用 --------------------------------------------------------------- 调用约定 调用约定(Calling convention)决定以下内容:函数参数的.
阅读全文
posted @
2012-04-02 17:01
莫水千流
阅读(217)
推荐(0) 编辑
一种Windows下线程同步的实现方法 .
摘要:Windows下的多线程与线程同步概述多任务是一个操作系统可以同时运行多个程序的能力。基本上,操作系统使用一个硬件时钟为同时运行的每个进程分配“时间片”。如果时间片足够小,并且机器也没有由于太多的程序而超负荷,那么在用户看来,所有的这些程序似乎在同试运行着。多线程是在一个程序内部实现多任务的能力。程序可以把它自己分隔为单独的执行“线程”,这些线程似乎也同时在运行[1]。[g1]多线程的应用非常广泛,最常见的是在需要进行大量计算的程序中使用辅助线程完成计算工作,而用户界面线程响应用户的操作。多线程中不同线程之间的通讯通常是使用共享数据对象来实现的,不管是使用全局变量还是线程过程函数的指针参数进行
阅读全文
posted @
2012-04-02 17:00
莫水千流
阅读(560)
推荐(0) 编辑
C++信号量 Semaphore 和 MFC中的 CSemaphore类使用 .
摘要:信号量(Semaphore)内核对象对线程的同步方式与前面几种方法不同,它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。在用CreateSemaphore()创建信号量时即要同时指出允许的最大资源计数和当前可用资源计数。一般是将当前可用资源计数设置为最大资源计数,每增加一个线程对共享资源的访问,当前可用资源计数就会减1,只要当前可用资源计数是大于0的,就可以发出信号量信号。但是当前可用计数减小到0时则说明当前占用资源的线程数已经达到了所允许的最大数目,不能在允许其他线程的进入,此时的信号量信号将无法发出。线程在处理完共享资源后,应在离开的同时通过Relea
阅读全文
posted @
2012-04-02 16:59
莫水千流
阅读(1523)
推荐(0) 编辑
VC++动态链接库 .
摘要:Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。Non-mfc dll//文件:lib.h#ifndef LIB_H#define LIB_Hextern "C" int add(int x,int y); //声明为C编译、连接方式的外部函数#endif//文件:lib.cpp#include "lib.h"int add(int x,int y){ return x + y;}静态调用:#include
阅读全文
posted @
2012-04-02 16:58
莫水千流
阅读(615)
推荐(0) 编辑
彻底了解指针数组,数组指针,以及函数指针 .
摘要:一 :关于指针和堆的内存分配 先来介绍一下指针 : 指针一种类型,理论上来说它包含其他变量的地址,因此有的书上也叫它:地址变量。既然指针是一个类型,是类型就有大小,在达内的服务器上或者普通的PC机上,都是4个字节大小,里边只是存储了一个变量的地址而已。不管什么类型的指针,char * ,int * ,int (*) ,string * ,float * ,都是说明了本指针所指向的地址空间是什么类型而已,了解了这个基本上所有的问题都好象都变的合理了。 在C++中,申请和释放堆中分配的存贮空间,分别使用new和delete的两个运算符来完成: 指针类型 指针变量名=new 指针类型 (初始化);
阅读全文
posted @
2012-04-02 16:58
莫水千流
阅读(1704)
推荐(1) 编辑
vmware centos ADSL共享上网设置 .
摘要:主机使用PPPOE拨号上网 方法一:NAT方式 1、先关闭虚拟机中的操作系统,回到虚拟机主界面 双击主界面右上方的的“Ethernet”,弹出“Network Adapter”对话框,选择“NAT” 2、启动虚拟机操作系统,设置IP为动态获取,即通过DHCP获得。 此时虚拟机中的操作系统用的是主机的IP,主机能够上网,那么虚拟机也能。 补充:用VMnet8,安装好后,选择NAT方式,然后在win主机上用ipconfig查看VMnet8的IP地址,一般是192.168.X.1/255.255.255.0,此时VMnet8的设置应该是自动获取IP,现在改成静态IP,并把此IP直接填入VMnet8里
阅读全文
posted @
2012-04-02 16:56
莫水千流
阅读(1504)
推荐(0) 编辑
const_cast dynamic_cast reinterpret_cast static_cast用法
摘要:const_cast 用法:const_cast<type_id> (expression) 该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。 常量指针被转化成非常量指针,并且仍然指向原来的对象; 常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。 Voiatile和const类试。举如下一例: class B{ public: int m_iNum; } void foo(){ const B b1; b1.m_iNum = 100;...
阅读全文
posted @
2012-04-02 16:55
莫水千流
阅读(288)
推荐(0) 编辑
使用Crosstool 0.43 在ubuntu0.94上制作arm交叉编译器arm-linux-gcc .
摘要:一。 保证ubuntu 上安装如下软件包Bisonflexbuild-essentialpatchlibncurses5-dev查看该软件包的依赖关系,可以看到以下内容:$ apt-cache depends build-essential安装软件包使用 $sudo apt-get install 软件包名二。 CrosstoolCrosstool 是一组脚本工具集,可构建和测试不同版本的gcc和glibc,用于那些支持glibc的体系结构。它也是一个开源项目,下载地址是http: //kegel.com/crosstool。用Crosstool构建交叉工具链要比分步编译容易得多,并且也方便许
阅读全文
posted @
2012-04-02 16:54
莫水千流
阅读(728)
推荐(0) 编辑
Linux下创建与解压zip, tar, tar.gz和tar.bz2文件--转 .
摘要:在Linux下面去压缩文件或者目录。我们将学习zip, tar, tar.gz和tar.bz2等压缩格式的基本用法。zip格式已成为压缩文件的标准选择,而且它在windows上也能使用。经常用zip格式压缩那些需要共享给windows用户的文件。如果只是共享给linux用户或者Mac用户,偏向于选择tar.gz格式。ZIPzip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用。缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在压缩率方面做得非常好。压缩一个目录:# zip -r archive_nam
阅读全文
posted @
2012-04-02 16:53
莫水千流
阅读(491)
推荐(0) 编辑
ubunt 下 配置samba 服务器
摘要:一. samba的安装:sudo apt-get insall sambasudo apt-get install smbfs二。修改/etc/samba/smb.confsudo gedit /etc/samba/smb.conf在smb.conf最后添加[myShare]comment = Shared Folder with username and passwordpath = /home/wangywriteable = yesbrowseable = yesguest ok = yescreate mask = 0777directory mask = 0777available
阅读全文
posted @
2012-04-02 16:53
莫水千流
阅读(389)
推荐(0) 编辑
Ubuntu 下安装GTK .
摘要:sudo apt-get install build-essential #这将安装gcc/g++/gdb/make 等基本编程工具sudo apt-get install gnome-core-devel gnome-dev-doc #这将安装gnome环境下的 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件sudo apt-get install pkg-config #用于在编译GTK程序时自动找出头文件及库文件位置sudo apt-get install devhelp #这将安装 devhelp GTK文档查看程序sudo apt-get install
阅读全文
posted @
2012-04-02 16:52
莫水千流
阅读(994)
推荐(0) 编辑
UBUNTU 配置WEB服务器,PHP,MYSQL,PHPADMIN,APARCHE .
摘要:一。 安装命令sudo apt-get install apache2 libapache2-mod-php5 php5 php5-gd mysql-server php5-mysql phpmyadmin1.SSHsudo apt-get install ssh2.安装PHPsudo apt-get install php5 libapache2-mod-php5sudo apt-get install libapache2-mod-auth-mysqlsudo apt-get install php5-mysqlsudo apt-get install php5-gd3. 安装Apache
阅读全文
posted @
2012-04-02 16:50
莫水千流
阅读(1010)
推荐(0) 编辑
ubuntu server 安装
摘要:1。光盘安装2。通过代理上网 a.Firefox代理上网 这个最简单了,依次点击 edit->preferences-> Advanced->network->settings 在里面填写代理服务器的IP,Port就可以了。 b.设置apt-get永久使用http代理 sudo gedit /etc/apt/apt.conf在您的apt.conf文件中加入下面这行(根据你的实际情况替换yourproxyaddress和proxyport)。 Acquire::http::Proxy "http://yourproxyaddress:proxyport"
阅读全文
posted @
2012-04-02 16:50
莫水千流
阅读(269)
推荐(0) 编辑
ubuntu server telnet 服务(转)
摘要:1、安装xinetd 以及telnetd # apt-get install xinetd telnetd 2、配置文件/etc/inetd.conf #cat /etc/inetd.conf (如果存在就不需要了) telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd 3.修改/etc/xinetd.conf # cat xinetd.conf # Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d
阅读全文
posted @
2012-04-02 16:49
莫水千流
阅读(1543)
推荐(0) 编辑
c++ static 关键字
摘要:++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下://Example 1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){ n=20; cout<<n<<endl; fn();}void fn(){
阅读全文
posted @
2012-04-02 16:48
莫水千流
阅读(209)
推荐(0) 编辑
VM连接 的三种方式
摘要:编辑器加载VM连接 的三种方式 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。在桥接模式下,你需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。同时,由于这个虚拟系统是局域网中的一个独立的主机系统,那么就可以手工配置它的TCP/IP配置信息,以实现通过局域网的网关或路由器访问互联网。 使用桥接模式的虚拟系统和宿主机器的关系,就像连接在同一个Hub上的两台电脑。想让它们相互通讯,你就需要为虚拟系统配置IP地址和子网掩码,否则就无法通信。 如果你想利
阅读全文
posted @
2012-04-02 16:45
莫水千流
阅读(937)
推荐(0) 编辑
c函数文件读写
摘要:typedef structtagMessageStatus{UIFormIDFormID;ulongulLayerID;UIStringIDenMessageID;} MessageStatus;static MessageStatus astMessageStatus [] = {{ID_Form_MSG_Normal_1,UI_LAYER_MSG_NORMAL,STRING_ID_Invalid},//MSG_NORMAL_1{ID_Form_MSG_Normal1_UnTouch,UI_LAYER_MSG_NORMAL,STRING_ID_Invalid},//MSG_NORMAL_1
阅读全文
posted @
2012-04-01 17:11
莫水千流
阅读(586)
推荐(0) 编辑
如何使用MFC和类型库创建自动化项目
摘要:摘要本文详细介绍了如何自动化像Microsoft Office这样支持COM的应用程序。更多信息下面部分介绍了如何创建MFC项目。采用Microsoft Excel举例,你可以将前8个步骤用于任何项目,修改9-15步用于不同的应用程序。创建自动化项目1.在Microsoft Developer Studio中,创建"MFC AppWizard(exe)"项目,命名为"AutoProject."2.在第1步的MFC应用程序向导中,选择"Dialog Based"应用程序类型并点"完成"在创建的项目信息对话框中将显示创
阅读全文
posted @
2012-04-01 17:03
莫水千流
阅读(2251)
推荐(0) 编辑
认识配置设置文件(INI与XML)
摘要:windows]load=run=NullPort=None[Desktop]WallpaperStyle=2Pattern=(无)[intl]s2359=PMiCountry=86…… 配置文件把信息分成若干"节",节标题放在方括号中,如[Desktop]就是Desktop节,在一个节内包含了一些与之相关相近的"项",并通过等号对其进行赋值。其中VALUE值可以有两种类型:数值型和字符串型,而且Windows操作系统专门为此提供了6个API函数来对配置设置文件进行读、写:GetPrivateProfileInt() 从私
阅读全文
posted @
2012-04-01 17:00
莫水千流
阅读(1706)
推荐(0) 编辑
VC++多线程编程
摘要:一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); //延时6秒} 编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。先来看一个工作线程的例子void Th..
阅读全文
posted @
2012-04-01 16:59
莫水千流
阅读(603)
推荐(0) 编辑
fopen时w与wb的区别
摘要:今天做了个小程序,把一个二进制文件分割为多个1.44M的文件,但分割完成后,发现很多文件的大小都超过1.44M。在网上搜索了下,发现时fopen是的参数部队。 “w”表示为文本文件。用则会把文件中的“0A”变为“0D0A”,因为某些文件系统认为“0A”为文本文件的换行符,windows认为“0D0A”为文本文件的换行符,为了兼容其他文件系统(如从linux拷贝来的文件),windows上的fopen函数做了这样的格式转换。如果我记得没错的话,linux与vxworks上不会做这样的转换,所以可以说使用“w”,其属性要看所在的平台。 “wb参数”表示为二进制文件,则样文件系统会按纯粹的二进制格.
阅读全文
posted @
2012-04-01 15:58
莫水千流
阅读(12838)
推荐(0) 编辑
在VC中彻底玩转Excel 转
摘要:如今Excel是越来越重要了,在我们自己开发的程序中不免要和Excel打交道了。利用Automation技术,我们可以在不去了解数据库的情况下玩转Excel,而且你会发现一切竟如此轻松! 好了,咱们开始吧,我不喜欢用长篇累牍的代码来故弄玄虚,所以下面的代码都是切中要害的片段,总体上是个连贯的过程,包括启动Excel,读取数据,写入数据,以及最后的关闭Excel,其中还包括了很多人感兴趣的合并单元格的处理。 特别说明以下代码需要MFC的支持,而且工程中还要包含EXCEL2000的定义文件:EXCEL9.H,EXCEL9.CPP**********************************.
阅读全文
posted @
2012-04-01 14:22
莫水千流
阅读(1742)
推荐(0) 编辑
C++字符换行 .
摘要:在C/C++语言中,可能我们要书写的一个字符串太长了,放在一行上影响代码的可读性。这时我们就需要多行书写了。字符串多行书写有两种规则:在字符串换行处加一个反斜杠’\’,下一行前不能有空格或者Tab键;使用双引号。程序示例:/** Introduction:* 测试C++中的字符串多行书写规则*/#include <iostream>#include <string>usingnamespace std;int main(){ //错误示例下一行前不能有空格 charchstr[] = "abcabc\ abcabc"; //错误示例'\
阅读全文
posted @
2012-04-01 10:43
莫水千流
阅读(30726)
推荐(1) 编辑