2014年2月20日

摘要: 在多线程的情况下,如果存在多个线程要使用同一个资源的情况时,这需要在线程之间进行协调(同步)才能是程序完成预定的工作,而不会出现灾难性的冲突。为了解决多线程之间的同步问题,MFC把对线程之间进行同步的一些基本操作封装在类CSyncObject中,为了适应在各种不同的情况下同步的需要,MFC又以类CSyncObject为基类派生了四种同步类,即事件,临界段,互斥体,和信号计数器,分别为:CEvents,CCriticalSections,CMutexes,CSemphores。这些类的声明都在头文件"afxmt.h"中。1、事件同步类:CEvent( BOOL bInitia 阅读全文
posted @ 2014-02-20 21:48 ljy2013 阅读(262) 评论(0) 推荐(0) 编辑
 
摘要: 1、进程和线程的基本概念:在计算机系统中,一个正在运行的应用程序就叫做一个进程,一个进程可以有多个线程,进程的任务是有这个进程的所有线程共同配合来完成的。一个进程至少有一个线程,叫做主线程。2、工作线程的创建:如何创建一个工作线程是一个比较容易的,只要清楚开启线程函数的原型就很简单了。开启线程的函数是AfxBeginThread,它主要有两种类型,分别是:CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nSt 阅读全文
posted @ 2014-02-20 20:45 ljy2013 阅读(336) 评论(0) 推荐(0) 编辑
 

2013年11月4日

摘要: Mat类型主要是跟matlab中的数据类型一样。故用起来很方便。Mat最大的优势跟STL很相似,都是对内存进行动态的管理,不需要之前用户手动的管理内存,对于一些大型的开发,有时候投入的lpImage内存管理的时间甚至比关注算法实现的时间还要多,这显然是不合适的。除了有些嵌入式场合必须使用c语言,我任何时候都强烈像大家推荐Mat。Mat这个类有两部分数据。一个是matrix header,这部分的大小是固定的,包含矩阵的大小,存储的方式,矩阵存储的地址等等。另一个部分是一个指向矩阵包含像素值的指针。[cpp]view plaincopyMatA,C;//createsjusttheheaderp 阅读全文
posted @ 2013-11-04 22:09 ljy2013 阅读(2767) 评论(0) 推荐(0) 编辑
 

2013年10月26日

只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2013-10-26 20:51 ljy2013 阅读(7) 评论(0) 推荐(0) 编辑
 

2013年10月25日

摘要: 最近在弄摄像头,发现我在调用摄像头自带的函数的时候,库没连接上,于是经过高人指点,学习了一下lib静态链接库,dll动态链接库来补充一下自己的基础知识。一、首先我们来介绍一下lib静态链接库。 lib静态链接库是在编译时要用到,如果只需要编译源代码的话只要有.lib文件就好了。下面主要讲一下在vs2010中如何使用自己建立的.lib文件,以及如何使用lib文件。 1、建立lib文件:首先在vs当中先建一个工程文件,然后单击下一步,选择lib静态链接库,紧接着就是建立自己的.h文件了,在h文件当中主要声明数据,函数,或者类,然后再.cpp源文件中实现相应的函数或者类。这是生成lib文件的过程.. 阅读全文
posted @ 2013-10-25 22:55 ljy2013 阅读(479) 评论(0) 推荐(0) 编辑
 

2013年9月13日

摘要: 1.类简单地说是一个性的数据类型。类当中有数据成员,和成员函数。类的基本思想就是体现出数据的抽象和封装。2.这里只需要说明一个问题即可:就是类成员函数的const类型:class SCREEN{public: const int get(const int& i , const int& j)const;};这里需要解释一下const int get(const int& i , const int& j)const;这一句的四个const分别表示是什么?本来这个内容是在第七章函数的时候已经介绍过了。在这里有了进一步的深刻了解。下面详细介绍一下:第一个const 阅读全文
posted @ 2013-09-13 22:56 ljy2013 阅读(175) 评论(0) 推荐(1) 编辑
 

2013年9月10日

摘要: 再谈迭代器,经过前面的几章节我们对迭代器有了大概的了解,本质上就是一个指针,即指向某一个地址的指针。1.插入迭代器:这类的迭代器与容器是绑定在一起的,实现在容器中插入元素的功能。主要有三种插入迭代器:(1)back_inserter()(2)front_inserter()(3)inserter(),该操作除了所关联的容器外,还有第二个参数:指向插入的起始位置的迭代器2.IOstream迭代器:istream_iterator用于读取输入流的迭代器,ostream_iterator用于写输出流的迭代器。标准库中定义了以下几种:(流迭代器之定义了最基本的操作:自增,解引用和赋值)istream_ 阅读全文
posted @ 2013-09-10 22:43 ljy2013 阅读(150) 评论(0) 推荐(0) 编辑
 

2013年9月9日

摘要: 在使用标准库当中的算法时,记得要包含#include头文件,在学习算法的时候个人感觉主要了解到算法实现的功能和他所需要的参数即可使用算法了。下面主要介绍课本中提到的标准库算法1.只读算法:find和accumulate算法(该算法在#include头文件中)。accumulate(vec.begin(),vec.end(),value)是将容器中所有的元素累加,并且加上处置value。函数带有三个参数,头两个参数指定累加的范围,最后一个参数指定累加的初值。标准库也定义了find_first_of算法(类似于string中的find算法一样),该算法是带有两对迭代器参数来标记两段元素的范围,在第 阅读全文
posted @ 2013-09-09 22:52 ljy2013 阅读(181) 评论(0) 推荐(0) 编辑
 

2013年9月8日

摘要: 学完了顺序容器和关联容器之后呢,大概知道了顺序容器是容器内部的元素是按照顺序存储的,而关联容器是按照键值对来存储的。顺序容器可以通过下标的位置来访问相应的元素,而关联容器map是通过小标(键)来访问相应的值。最主要的是:其实这些容器都是模板类型的。 当然我觉得最重要的差异还是关联容器当中的元素的数据类型:pair类型的数据,即pairp1;make_pair(v1,v2);下面详细的来看一下顺序容器和关联容器在操作上的差异:1.首先不管是顺序容器还是关联容器都是要定义的,由于容器的类型不同,存在一些差异:(这里主要将常见的定义)顺序容器的定义:1.Cc ; 2. C c(n,t) ; ... 阅读全文
posted @ 2013-09-08 22:49 ljy2013 阅读(771) 评论(0) 推荐(0) 编辑
 

2013年9月7日

摘要: 1.set类型的关联容器set容器跟map容器相类似,只不过set的容器只是单纯的键的集合。set容器不支持下标操作,元素类型不是value_type类型,而是key_type类型。即set容器仅仅只存储键,而没有所关联的值。与map容器一样,存储的键也必须是唯一的,不能修改。2.set的容器的定义setiset;创建一个空的set的对象iset,元素类型为T。setiset(b,e);创建一个set的对象iset,有迭代器b和e指定范围的元素初始化,元素必须是T类型。3.set的容器的添加元素由于set容器不支持下标操作,所以只有与map容器一样采用insert操作来添加元素。setset1 阅读全文
posted @ 2013-09-07 22:47 ljy2013 阅读(221) 评论(0) 推荐(0) 编辑
 

2013年9月6日

摘要: 在将关联容器之前,我们首先了解都得是pair类型的数据。pair类型包含两个数据值,在创建pair类型的对象时,必须要提供两个类型名。即pair对象所包含的两个数据成员各自对应的类型名字。pair类型在utility的头文件中。1.创建pair类型的对象:pairp1;创建一个空的pair对象,它的两个元素分别是T1和T2类型,采用值初始化。pairp1(v1,v2);创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为V1,second成员初始化为V2。make_pair(V1,V2);以V1,V2值创建一个新的pair对象,其中元素类型分别是V1和V2的类型。 阅读全文
posted @ 2013-09-06 22:51 ljy2013 阅读(198) 评论(0) 推荐(0) 编辑
 

2013年9月5日

摘要: 1.容器的自增长:我们知道vector容器元素是连续存储的,当添加一个元素时,如果容器中已经没有空间容纳新的元素,这时候由于容器元素必须连续存储以便随机访问,所以vector必须重新分配存储空间,用来存放原来的元素以及新添加的元素,即存放在旧的存储空间的元素被复制到新的存储空间里,接着插入新的元素,最后撤销旧的存储空间。而对于不连续存储元素的容器而言,就不存在内存分配问题。例如list容器。为了解决这个问题,能够使vector容器实现快速的内存分配。实际上分配的容量要比当前所需要的空间多一些。vector容器预留了这些额外的内存容量的确切数目因库不同而不同。对此vector容器提供了两个成员函 阅读全文
posted @ 2013-09-05 10:41 ljy2013 阅读(192) 评论(0) 推荐(0) 编辑
 

2013年9月2日

摘要: 标准库里面定义了三种顺序容器:vector(支持快速随机访问),list(支持快速插入/删除),deque(双端队列)。标准库还提供了三种适配器:stack(后进先出(栈)),queue(先进先出(队列)),priority_queue(有优先级管理的队列)。1.迭代器和迭代器的范围:所有的容器都支持:接引用、自增、自减、以及相等和不等操作。但是vector和deque的迭代器还支持:算术运算(iter+/-n),复合赋值、关系运算 操作。2.顺序容器的操作:(1)容器定义的类型主要有:size_type(无符号整形,表明容器的长度)、iterator(容器的迭代器)、const_iterat 阅读全文
posted @ 2013-09-02 22:55 ljy2013 阅读(224) 评论(0) 推荐(0) 编辑
 

2013年8月31日

摘要: 1.IO对象时不可复制或者赋值的:也就是说形参或者返回类型也不能为流类型。如果非要传递或者返回IO对象的的话,则必须传递或者返回指向对象的指针或者引用。如: ofstream &print(ofstream&);while(print(out2)){}。对IO对象的读写会改变它的状态,因此引用必须是非const的。2.流的条件状态:通过strm::iostate来定义流的条件状态strm::badbit 是strm::iostate类型的值,用来指示流被破坏了。strm::failbit是strm::iostate类型的值,用来指示IO操作失败。strm::eofbit是str 阅读全文
posted @ 2013-08-31 22:58 ljy2013 阅读(355) 评论(2) 推荐(0) 编辑
 

2013年8月28日

摘要: 1.主函数的形参:int main(int argc, char *argv[]){};第二个形参argv[]是一个C风格字符串数组,第一个形参argc则用于传递该数组中字符串的个数。2.return 语句: (1).返回引用时:当返回的是引用类型的时候,没有复制返回值。相反,返回的是对象本身,不是对象的副本。例如: const string& manip(const string& s1, const string& s2) { return s1.size()1)return faction(val-1)*val; return 1; }4.默认实... 阅读全文
posted @ 2013-08-28 21:02 ljy2013 阅读(200) 评论(0) 推荐(0) 编辑
 

2013年8月25日

摘要: 1.函数的定义: 函数主要包括:返回类型、函数名、形参表、函数体几个部分组成。2.函数参数的传递: (1)非引用型形参:参数是通过复制对应的实参实现初始化。当用实参副本初始化形参时,函数并没有访问调用所传递的实参本身,因此不会修改实参的本身。如:int gcd(int v1,int v2) { while(v2){ int temp=v2; v2=v1%v2; v1=temp; } return v1; }循环体虽然修改了v1,v2的值,但这些变化仅限于局部参数,而对调用gc... 阅读全文
posted @ 2013-08-25 22:44 ljy2013 阅读(171) 评论(0) 推荐(0) 编辑
 

2013年8月20日

摘要: 1.// 计算一个整数的位数.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;int wei(int a){static int total=0;if(a/1000000000!=0) return total=10;else if(a/100000000!=0) return total=9;else if(a/10000000!=0) return total=8;else if(a/1000000!=0) return total=7;else if(a/100000!=0) r 阅读全文
posted @ 2013-08-20 14:11 ljy2013 阅读(258) 评论(0) 推荐(0) 编辑
 

2013年8月19日

摘要: 表达式这章比较简单,一般有过c的基础的人都应该问题不大,要知道连我都觉得比较简单,相信你们肯定更加容易了。 new和delete表达式:动态创建和释放数组,定义变量时,必须指定其数据类型和名字。然而动态创建对象时,只需要指定其数据类型,而不必为该对象命名。取而代之的是,new表达式返回值指向新创建对象的指针,我们通过指针来访问对象: int i; int *pi=new int; 这个new表达式在自由存储区中分配创建了一个整型对象,并且返回此对象的地址,并且该地址初始化指针pi;动... 阅读全文
posted @ 2013-08-19 22:12 ljy2013 阅读(202) 评论(0) 推荐(0) 编辑
 

2013年8月17日

摘要: // 打折.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;int _tmain(int argc, _TCHAR* argv[]){int a;double total;cout>a;if(95*a>300)total=(95*a)*0.85;else total=95*a;cout//#include //#include #include //定义数学函数 using namespace std;int _tmain(int argc, _TCHAR* argv[]) 阅读全文
posted @ 2013-08-17 20:47 ljy2013 阅读(236) 评论(0) 推荐(0) 编辑
 

2013年8月6日

摘要: 数组:首先数组的初始化不允许直接复制和赋值,数组的元素的类型是size_t类型,可以通过for(size_t ix=0;ix!=array_size;++ix)。 指针:指针的定义: int *P;注意:在使用指针之前必须要初始化指针。并且对指针初始化的值应该使用如下四种值:1、0值常量表达式。例如和疑惑的0值得const对象和字面值常量0。2、类型匹配的对象的地址。3、另一个对象之后的下一地址。4、同类型的另一个有效指针。 听人家说指针的操作是最难的,但我对指针的理解就是如果要用到指针的话,首先你要必须要明确地知道对应的是变量地址还是变量值。比如如果有一个容器vector,那么你必须... 阅读全文
posted @ 2013-08-06 22:48 ljy2013 阅读(244) 评论(1) 推荐(1) 编辑
 

2013年8月5日

摘要: 第三章主要介绍了C++中标准库类型。主要讲到string和vector类型。在string类型中,能够很方便的操作字符串,应该要注意的地方就是它的字符串中元素的位置的类型是:size_type类型的数据,其中主要涉及到如何访问每一个字符串的字符:(下标法)for(string::size_type ix=0;ix!=s.size();++ix){}。(迭代器法)for(string::iterator iter=s.begin();iter!=s.end();++iter){}。 在vector类型中,要注意它的定义方式一般是vectorvec;同样也涉及到如何去访问容器当中的元素,其元... 阅读全文
posted @ 2013-08-05 11:12 ljy2013 阅读(139) 评论(0) 推荐(0) 编辑
 
摘要: 这第二章主要是介绍了C++中基本的内置数据类型:整型与浮点型。介绍了什么是变量的过程中了解到了左值与右值的概念。左值是可以出现在赋值语句的左边或者右边,也就是说可以放在等号的左右两边,而右值只能是出现在赋值语句的右边,不能在赋值语句的左边,也就是只能出现在等号的右边。 声明和定义这一节中要记住变量的定义只有一次,而声明的次数可以有很多次,并且它是以关键字extern来声明的。如extern int i;这就是声明一个int变量i;也有一种情况声明就是定义,那就是在声明的时候初始化了。如:extern double pi=3.1416;这就是表示声明并且定义了double型变量pi,后面就... 阅读全文
posted @ 2013-08-05 10:51 ljy2013 阅读(299) 评论(1) 推荐(1) 编辑
 
摘要: 第一章主要是把C++的主要的部分简单的介绍了一下,让读者对C++开始有一个简单的了解。看完第一章的收获就是知道如何去读入不确定数目的输入,主要是形式是:whlie(cin>>s){},利用这个循环来读入不确定数目的输入,但是这个循环有一个问题就是要设定什么时候输入已经结束,来退出循环。再有就是对类类型的数据有了最初的了解。明白了其实C++主要的过程是要学会用自定义的类类型的数据,就像是用内置类型的数据一样熟练。对于类类型的数据后续的章节还会学到,期待进一步的了解。 阅读全文
posted @ 2013-08-05 10:09 ljy2013 阅读(180) 评论(0) 推荐(0) 编辑
 

2013年8月4日

摘要: 博客开通很久了,但才刚开始用 阅读全文
posted @ 2013-08-04 10:40 ljy2013 阅读(133) 评论(0) 推荐(0) 编辑