
C/C++
文章平均质量分 52
chw1989
这个作者很懒,什么都没留下…
展开
-
堆和栈的区别(被转载N次的博文)
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、全局区(静态区)(static)—转载 2011-10-28 09:07:14 · 693 阅读 · 0 评论 -
VS2010点滴——不能将参数 1 从“const char [11]”转换为“LPCWSTR”
#include"windows.h"#include"iostream"using namespace std;int main(){ char Write[10],Read[10]; for(int i=0;i<10;i++) Write[i]=10+i; for(int i=0;i<10;i++) cout<<hex<<(int)Write[i]<<" "; cou原创 2012-04-20 17:12:32 · 36710 阅读 · 21 评论 -
VS2010点滴——Concurrency Runtime namespace(异步编程一)
微软已经在VS10中加入了Concurrency Runtime namespace来支持C++的异步编程,笔者认为异步编程在是现代编程语言的一个发展方向。在此总结一些异步编程的基本概念和语法,希望能给大家理解异步编程带来一些方便。首先,异步编程的基本单位是task class。我们把想要执行异步操作的函数放入task 里面,通过协调这些task的关系,来实现基于函数的异步操作。这种方式相转载 2012-04-22 12:31:40 · 2580 阅读 · 1 评论 -
VS2010点滴——Concurrency Runtime namespace(异步编程三)
任务组:在之前我们介绍的异步操作都是基于Task更轻量级的异步调用方式。在PPL中Concurrency::task_group和Concurrency::structured_task_group,这两个类都是异步操作的任务组,Concurrency::task_handle类是任务组的基本单位。 我们先用 Concurrency::structured_task转载 2012-04-22 13:10:59 · 2642 阅读 · 0 评论 -
VS2010点滴——Concurrency Runtime namespace(异步编程二)
取消操作:取消一个正在进行的task,方式大概分两种,一种是从内部取消,另外一种是从外部取消。我们通过cancel_current_task 去从内部取消这个task #include #include #include #include using namespace Concurrency;using namespace std;转载 2012-04-22 12:34:49 · 2118 阅读 · 2 评论 -
c\c++中单冒号(:)和双冒号(::)的用法
一.单冒号(:) 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。这样就可以把几个不同的原创 2012-04-20 10:33:56 · 54231 阅读 · 3 评论 -
随机数产生函数总是产生相同随机数的原因
1.没有设置随机数种子下面的程序直接调用rand()函数,结果产生的20个随机数虽然各不相同,但是每次运行得到的20个随机数与上次运行的结果都是一样的,就是因为没有设置随机数种子,虽然程序运行过程中可以产生不同随机数,但是下次运行产生的随机数顺序与上次运行相同,大学的时候搞编程竞赛就遇到这个问题,NND,当时还真没解决。int main(){ for(int i=0;i<20;i++)原创 2012-04-26 16:20:05 · 10156 阅读 · 0 评论 -
VS2010点滴——C++的Lambda表达式
C++的Lambda表达式在WIN RT的异步编程中,占有非常重要的作用。但C++的Lambda表达式又不同于其他语言,比如C#,javascript。本篇旨在讨论C++ Lambda表达式的基本语法和概念,希望大家多多指正。 首先,我们看一下Lambda表达式的基本构成 1. 是捕获值列表,2.是传入参数列表,3.可修改标示符,4.错误抛出标示符,5.函数返回值转载 2012-04-22 12:50:24 · 4451 阅读 · 2 评论 -
SQL语句处理含有特殊字符的表名
SqlStr="select * into "+SheetName+" from "+FartherDirectory; 上面个的SQL语句在执行的时候有时会出错,后来发现如果SheetName中含有特殊字符“+”,在网上找了半天才知道解决办法,如果表名中含有“@#¥%*+-”等特殊符号,则在处理的表的时候需要加上“[ ]”,例如上面的语句需要改为下面的语句才能够接收含有特殊字原创 2012-04-24 18:14:07 · 12420 阅读 · 3 评论 -
多线程套接字编程-----程序实例(C++实现)
一.程序介绍该程序主要包括以下内容:1.多线程程序设计的一般框架,新线程负责循环接收网络数据,一旦收到网络数据就交由主线程处理;主线程负责循环处理网络数据。2.(UDP)套接字编程的一般框架,为了方便实验该程序只是用到了UDP套接字,没有考虑丢包延迟等网络问题,在实际程序设计中可以采用TCP套接字。3.如何使用套接字发送多个不同的结构体,通过对不同的结构体添加不同的标志位,从而区分原创 2012-04-12 12:54:27 · 19704 阅读 · 3 评论 -
多线程程序设计------一个实例(SDES破解)
#include"time.h"#include"stdlib.h"#include"stdio.h"#include"S_DES.h"#include"string.h"#include"windows.h"#include"iostream.h"#define STRMAX 50const WM_GET_MSG=WM_USER+1;//搜索成功的消息类型const WM_F原创 2012-03-26 22:18:26 · 1001 阅读 · 0 评论 -
多线程程序设计(四)
3.2.5 互斥内核对象互斥(Mutex)是一种用途非常广泛的内核对象。能够保证多个线程对同一共享资源的互斥访问。同临界区有些类似,只有拥有互斥对象的线程才具有访问资源的权限,由于互斥对象只有一个,因此就决定了任何情况下此共享资源都不会同时被多个线程所访问。当前占据资源的线程在任务处理完后应将拥有的互斥对象交出,以便其他线程在获得后得以访问资源。与其他几种内核对象不同,互斥对象在操作系统中拥有转载 2012-03-26 22:14:16 · 764 阅读 · 1 评论 -
多线程程序设计(三)
3.2 线程同步同步可以保证在一个时间内只有一个线程对某个共享资源有控制权。共享资源包括全局变量、公共数据成员或者句柄等。临界区内核对象和事件内核对象可以很好地用于多线程同步和它们之间的通信。本节将结合各种简单的例子来讨论产生同步问题的根本原因,进而提出相应的解决方案。3.2.1 临界区对象1.为什么要线程同步当多个线程在同一个进程中执行时,可能有不止一个线程同时执行同一段代码,访转载 2012-03-26 22:13:26 · 707 阅读 · 0 评论 -
多线程程序设计(二)
4.退出代码Exit Code成员Exit Code指定了线程的退出代码,也可以说是线程函数的返回值。在线程运行期间,线程函数还没有返回,Exit Code的值是STILL_ACTIVE。线程运行结束后,系统自动将ExitCode设为线程函数的返回值。可以用GetExitCodeThread函数得到线程的退出代码。 …… DWORD dwExitCode转载 2012-03-26 22:11:56 · 674 阅读 · 0 评论 -
多线程程序设计(一)
应用程序被装载到内存之后就形成了进程,这是上一章重点讨论的话题。但是程序在内存中是如何执行的呢?这就涉及到了代码的执行单元——线程。本章就线程的创建、多线程处理展开介绍。本章首先介绍创建线程的方法和线程内核对象,接着详细分析产生线程同步问题的根本原因,并提出一些解决办法。为了扩展多线程的应用和为读者提供更多的实际机会,本章还重点讨论了线程局部存储和CWinThread类的设计,这也是设计框架程转载 2012-03-26 22:10:57 · 819 阅读 · 0 评论 -
C/C++中的时间处理函数
摘要: 本文从介绍基础概念入手,探讨了在C/C++中对日期和时间操作所用到的数据结构和函数,并对计时、时间的获取、时间的计算和显示格式等方面进行了阐述。本文还通过大量的实例向你展示了time.h头文件中声明的各种函数和数据结构的详细使用方法。 关键字: UTC(世界标准时间),Calendar Time(日历时间),epoch(时间点),clock tick(时钟计时单元) 1转载 2012-03-25 22:31:38 · 618 阅读 · 0 评论 -
malloc/free和new/delete的区别
首先,来看一段程序:#include#include#includeusing namespace std;int main(){ int int_1=5; int *int_2=new int[10]; int *int_3=(int *)malloc(10*sizeof(int)); int_2[0]=int_1; cout原创 2011-10-28 09:58:30 · 696 阅读 · 0 评论 -
static用法小结
static用法小结static关键字是C, C++中都存在的关键字, 它主要有三种使用方式, 其中前两种只指在C语言中使用, 第三种在C++中使用(C,C++中具体细微操作不尽相同, 本文以C++为准). (1)局部静态变量 (2)外部静态变量/函数 (3)静态数据成员/成员函数 下面就这三种使用方式及注意事项分别说明转载 2011-10-28 10:25:36 · 512 阅读 · 0 评论 -
VC中栈空间的更改
内存的读取速度显然较硬盘要快的多,当做程序时遇到大规模数据的频繁存取的时候,开辟内存空间就更显得重要了!一般来说,我们所用的内存有栈和堆之分,其它的我们很少控制,栈的速度快,但是空间小,不灵活;而堆的空间几乎可以满足任何要求,灵活,但是相对的速度要慢了很多,并且在vc中堆是人为控制的,new了就要delete,否则很容易产生内存泄露等问题。将程序栈空间定义得大一点,VC++默认的栈空间是1M,原创 2012-05-08 21:55:24 · 2668 阅读 · 0 评论