摘要:掌握文本文件读写的方法了解二进制文件的读写方法C++文件流:fstream // 文件流ifstream // 输入文件流ofstream // 输出文件流//创建一个文本文件并写入信息//同向屏幕上输出信息一样将信息输出至文件#include#includevoid main(){ ofstream f1("d:\\me.txt"); //打开文件用于写,若文件不存在就创建它 if(!f1)return; //打开文件失败则结束运行 f1>运算符 只能进行文本文件的读写操作,用于二进制文件可能会产生错误。 使用函数成员 get、...
阅读全文
随笔分类 - C++/C
摘要:下载源代码一、问题的提出编写一个耗时的单线程程序: 新建一个基于对话框的应用程序SingleThread,在主对话框IDD_SINGLETHREAD_DIALOG添加一个按钮,ID为IDC_SLEEP_SIX_SECOND,标题为“延时6秒”,添加按钮的响应函数,代码如下:void CSingleThreadDlg::OnSleepSixSecond() { Sleep(6000); //延时6秒} 编译并运行应用程序,单击“延时6秒”按钮,你就会发现在这6秒期间程序就象“死机”一样,不在响应其它消息。为了更好地处理这种耗时的操作,我们有必要学习——多线程编程。 二、多线程概述 进程和线...
阅读全文
摘要:下载源代码五、MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程。二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环。 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等。用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等。但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务。 在MFC中,一般用全局函数AfxBeginThread()来创建并初始化一个线程的运行,该函数有两种重载形式,分别用...
阅读全文
摘要:下载源代码七、线程间通讯 一般而言,应用程序中的一个次要线程总是为主线程执行特定的任务,这样,主线程和次要线程间必定有一个信息传递的渠道,也就是主线程和次要线程间要进行通信。这种线程间的通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的,下面将进行说明。使用全局变量进行通信由于属于同一个进程的各个线程共享操作系统分配该进程的资源,故解决线程间通信最简单的一种方法是使用全局变量。对于标准类型的全局变量,我们建议使用volatile 修饰符,它告诉编译器无需对该变量作任何的优化,即无需将它放到一个寄存器中,并且该值可被外部改变。如果线程间所需传递的信息较复杂,我们可以定义一个结构,通过传..
阅读全文
摘要:原文作者:Alex Blekhman翻译:朱金灿原文来源:http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx译文来源:http://blog.csdn.net/clever101C++语言毕竟能和Windows DLLs能够和平共处。介绍自从Windows的开始阶段动态链接库(DLL)就是Windows平台的一个组成部分。动态链接库允许在一个独立的模块中封装一系列的功能函数然后以一个显式的C函数列表提供外部使用者使用。在上个世纪80年代,当Windows DLLs面世时,对于广大开发者而言只有C语言是切实可行的开发手段
阅读全文
摘要:内存泄漏排查一下本人只是简单的介绍一个实用, 如果读者很感兴趣, 可以查阅msdn自己去深入调查相关的API和原理.API 介绍1. 马上打印泄漏信息:_CrtDumpMemoryLeaks();一般用于局部跟踪内存泄漏问题,使用的方法很简单,你怀疑在某一个时刻有内存泄漏了,就执行这个函数调用,然后在 vs 调试器的 "output" 窗口会马上会打印出当前所有没有释放的内存的申请明细(包括文件名,行号, 第几次内存分配)。双击就可以定位到源文件 内存申请的地方, 很方便.2. 程序结束之前打印泄漏信息:一般用于全局的内存泄漏问题,在程序刚开始的时候就可以用起来。使用方法也
阅读全文
摘要:API各函数作用简介1.控件与消息函数AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小AnyPopup 判断屏幕上是否存在任何弹出式窗口ArrangeIconicWindows 排列一个父窗口的最小化子窗口AttachThreadInput 连接线程输入函数BeginDeferWindowPos 启动构建一系列新窗口位置的过程BringWindowToTop 将指定的窗口带至窗口列表顶部CascadeWindows 以层叠方式排列窗口ChildWindowFromPoint 返回父窗口中包含了指定点的第一个子窗口的句柄ClientToScreen 判断窗
阅读全文
摘要:DLL编写教程半年不能上网,最近网络终于通了,终于可以更新博客了,写点什么呢?决定最近写一个编程技术系列,其内容是一些通用的编程技术。例如DLL,COM,Socket,多线程等等。这些技术的特点就是使用广泛,但是误解很多;网上教程很多,但是几乎没有什么优质良品。我以近几个月来的编程经验发现,很有必要好好的总结一下这些编程技术了。一来对自己是总结提高,二来可以方便光顾我博客的朋友。好了,废话少说,言归正传。第一篇就是《DLL编写教程》,为什么起这么土的名字呢?为什么不叫《轻轻松松写DLL》或者《DLL一日通》呢?或者更nb的《深入简出DLL》呢?呵呵,常常上网搜索资料的弟兄自然知道。本文对通用的
阅读全文
摘要:下列附有VS2008发布程序介绍:vc2008程序发布指南2008-05-0317:46vc2008开发的程序的发布方式可以有5种方式:1.采用静态链接到crt和MFC.只要你拥有组成程序的所有源代码,你就可以采用这种方式,这种方式除了程序变大一点,好处多多:1)不必重新发布vc2008基础库vcredist_x86.exe(安装到WinSxS).2)不必产生,嵌入manifest.3)也不把vc2008基础库放在程序所在目录.2.exe(嵌入manifest)+vcredist_x86.exe确保程序正确产生并嵌入manifest文件,然后把程序和vcredist_x86.exe一起发布.用
阅读全文
摘要:在VC++2008的项目中,如何显示地指定要使用的C++库的版本?开发环境:VS2008 SP1 +Win2003 SP2 因为我的VS2008安装了SP1补丁,所以有了9.0.30729.1的MFC库文件(MFC90.DLL MSVCR90.DLL)。新建了一个MFC应用程序,编译为RELEASE版本,叫做“test1.exe”,可以从程序中的清单文件(manifest)看到以下内容:XML code... ... 说明本程序需要...
阅读全文
摘要:在程序中发现一下代码:int CHmcVideoMgt ::OnGetDiskRunningInfo( SOCKETPARAM *pSocketInfo ,Json:: Value Param ){ int iArrayLen = Param[ _T("NUM" )].asInt(); ..... LPDiskRunningInfo pDiskRunningInfo = new DiskRunningInfo[iArrayLen ]; int nResult = HMCBLL_GetDiskR...
阅读全文
摘要:一. 在编程过程中经常需要格式对齐,这就需要把字符串格式成固定长度: 1: C++提供了setiosflags()来设置输出格式,setw(int)设置输出宽度: cout<<setiosflags(ios::left)<<setw(10)<<"字段1" <<setw(10)<<"字段2" <<setw(10)<<"字段3"<<endl;cout<<setiosflags(ios::left)<<setw(10)&l
阅读全文
摘要:当前流行的Windows操作系统能同时运行几个程序(独立运行的程序又称之为进程),对于同一个程序,它又可以分成若干个独立的执行流,我们称之为线程,线程提供了多任务处理的能力。用进程和线程的观点来研究软件是当今普遍采用的方法,进程和线程的概念的出现,对提高软件的并行性有着重要的意义。现在的大型应用软件无一不是多线程多任务处理,单线程的软件是不可想象的。因此掌握多线程多任务设计方法对每个程序员都是必需要掌握的。本实例针对多线程技术在应用中经常遇到的问题,如线程间的通信、同步等,分别进行探讨,并利用多线程技术进行线程之间的通信,实现了数字的简单排序。 一、 实现方法 1、理解线程 要讲解...
阅读全文
摘要:相信有过多线程编程经验的朋友,都吃过死锁的苦。除非你不使用多线程,否则死锁的可能性会一直存在。为什么会出现死锁呢?我想原因主要有下面几个方面: (1)个人使用锁的经验差异 (2)模块使用锁的差异 (3)版本之间的差异 (4)分支之间的差异 (5)修改代码和重构代码带来的差异 不管什么原因,死锁的危机都是存在的。那么,通常出现的死锁都有哪些呢?我们可以一个一个看过来,(1)忘记释放锁[cpp]view plaincopy voiddata_process(){EnterCriticalSection();if(/*errorhappens*/)return;LeaveCriticalSectio
阅读全文
摘要:用VS编写C#时,可以用#region name和#endregion,将代码分段,这样可以将代码折叠起来,当类过大,方法过长时,这种方法可以提高阅读效率,是人看着更舒服。对于C/C++语言,#region失效。这不免让人郁闷。 VS对C/C++语言,默认仅折叠预处理命令(#include, #pragma等)、类、函数等。如果某个函数特别长,大大超出了屏幕范围,特别是多重循环时,很难确定哪个循环在哪终止,十分不便。 VS虽然没办法对C/C++语言像C#那样任意分段,任意折叠,但是支持大纲折叠。即支持if语句,循环语句的折叠。虽然不像C#那样方面,但也能将就着用了。 具体设置过程为:菜单栏,工
阅读全文
摘要:STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。在 使用 list、set 或 map遍历删除某些元素时可以这样使用:正确使用方法1std::list List;std::list::iterator itList;for( itList = List.begin(); itList != List.end(); ){if(WillDelete(*itList) ){itList = List.erase( itList);
阅读全文
摘要:说明:文章内容部分参考网络上的解决思路。在没有安装Microsoft Visual Studio的系统上,Debug版本无法正常运行。这是由于缺少vs运行时库引起的。以vs2005为例。开发机用vs2005编译出Debug版本程序,发送到一台没有安装过vs的机器上运行,运行不成功。解决方法如下。C:\ProgramFiles\Microsoft Visual Studio 8\VC\redist\Debug_NonRedist\x86\Microsoft.VC80.DebugCRT下找到了下列文件:msvcm80d.dllmsvcp80d.dllmsvcr80d.dllMicrosoft.VC
阅读全文
摘要:参考资料:http://apps.hi.baidu.com/share/detail/39003388http://blog.csdn.net/yc0188/article/details/4741871http://bbs.chinaunix.net/thread-2094334-1-1.html//头文件#include #include #include using namespace std;//函数声明int request(char* hostname, char* api, char* parameters);//方法调用int _tmain(int argc, TCHAR* a
阅读全文
摘要:一、 概述C++多线程开发中,容易出现死锁导致程序挂起的现象。关于死锁的信息,见百度百科http://baike.baidu.com/view/121723.htm。解决步骤分为三步:1、检测死锁线程。2、打印线程信息。3、修改死锁程序。二、 程序示例VS2005创建支持MFC的win32控制台程序。代码见示例代码DeadLockTest.cpp。[cpp]view plaincopy //DeadLockTest.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include&qu
阅读全文
摘要:一、默认参数在C++中,可以为参数指定默认值。在函数调用时没有指定与形参相对应的实参时, 就自动使用默认参数。默认参数的语法与使用:(1)在函数声明或定义时,直接对参数赋值。这就是默认参数;(2)在函数调用时,省略部分或全部参数。这时可以用默认参数来代替。注意:(1)默认参数只可在函数声明中设定一次。只有在没有函数声明时,才可以在函数定义中设定。(#add ,此句意为存在函数声明和定义两部分的时候。验证表明有这个限制,可以随便,但出于规范,在声明中指定)(2)如果一个参数设定了缺省值时,其右边的参数都要有缺省值。(#add 这是定义时,类的成员函数的参数表在声明时默认参数位于参数表右部,使用时
阅读全文