随笔分类 -  c++

上一页 1 ··· 9 10 11 12 13 14 15 下一页
摘要:char * __cdecl strstr ( const char * str1, const char * str2 ){ char *cp = (char *) str1; char *s1, *s2; if ( !*str2 ) return((char *)str1); while (*cp) { s1 = cp; s2 = (char *) str2; whil... 阅读全文
posted @ 2014-04-09 15:07 zzyoucan 阅读(228) 评论(0) 推荐(0)
摘要:// std_tr1__memory__shared_ptr_reset.cpp // compile with: /EHsc #include #include struct deleter { void operator()(int *p) { delete p; } }; int main() { std::shared_ptr sp(new int(5)); //std::boolalpha bool类型输出为true或者false而不是0或者1,默认输出0和1 //reset更换管理对象 std::cout <<... 阅读全文
posted @ 2014-04-07 21:19 zzyoucan 阅读(1075) 评论(0) 推荐(0)
摘要:1 目 录 1 STL 简介 .............................................................................................................................................. 2 2 顺序性容器 .................................................................................................................................... 阅读全文
posted @ 2014-04-04 18:01 zzyoucan 阅读(557) 评论(0) 推荐(0)
摘要:TCHAR *ptch = TEXT("This is a const string.");如果使用UNICODE字符集, 则TEXT("This is a const string.")相当于L"This is a const string.", 如果使用ASCII集, 则上述字符串相当于“This is a const string.”。这样, 写的程序既可以使用UNICODE, 也可以使用ASCII, 增强了移植性。在写windows应用程序时, 如果您不确定使用UNICODE还是ASCII好, 那么推荐您使用TCHAR来替代程 阅读全文
posted @ 2014-03-31 00:01 zzyoucan 阅读(290) 评论(0) 推荐(0)
摘要:功能:将数据格式化到字符串中原型:int sprintf( char *buffer, const char *format, [ argument] … );返回值是这个字符串的长度上次我企图这样用char* d;int s = 88;sprintf(d, "%d", s);这样是错误的:原因是d没有分配内存但这样可以char d[20];int s = 88;sprintf(d, "%d", s);但看sprintf的原型,我更相信,d相当于int const*,c++好像将const赋给非const,这个就已经分配内存了,所以可以使用sprintf 阅读全文
posted @ 2014-03-30 22:28 zzyoucan 阅读(261) 评论(0) 推荐(0)
摘要:1.开启服务命令services.msc2.删除服务sc delete "服务名" 阅读全文
posted @ 2014-03-28 14:07 zzyoucan 阅读(125) 评论(0) 推荐(0)
摘要:barrier:栅栏的意思,当barrier bar(3),这三个线程会放到栅栏中,等第三个线程执行时一起唤醒,然后返回barrierbarrier类的接口定义如下: 1 class barrier : private boost::noncopyable // Exposition only 2 { 3 public: 4 // construct/copy/destruct 5 barrier(size_t n); 6 ~barrier(); 7 8 // waiting 9 bool wait();10 };barrier类为我们提供了这样一种控制线程同步的机制... 阅读全文
posted @ 2014-03-27 01:21 zzyoucan 阅读(1624) 评论(0) 推荐(0)
摘要:1相关理念(1)类名条件变量和互斥变量都是boost库中被封装的类。(2)条件变量条件变量是thread库提供的一种等待线程同步的机制,可实现线程间的通信,它必须与互斥量配合使用,等待另一个线程中某个事件发生后本线程才能继续执行。(3)互斥变量互斥量是一种用于多线程编程的手段,它可以在多线程编程中防止多个线程同时操作共享资源[或称为临界区]。思想为:在每个线程开始的第一条语句使用获取互斥变量“锁有权”的语句,一旦一个线程[线程1]锁住了互斥量,那么其它线程只有等待线程1解锁互斥量后且另一线程[线程2]又获取到互斥变量的“锁有权”后才能运行这个线程[线程2]后面的代码。(4)互斥量有可能的缺点[ 阅读全文
posted @ 2014-03-26 19:49 zzyoucan 阅读(783) 评论(0) 推荐(0)
摘要:进程中线程同步的四种常用方式:1、 临界区(CCriticalSection)当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。具体应用方式:1、 定义临界区对象CcriticalSection g_CriticalSection;2、 在访问共享资源(代码或变量)之前,先获得临界区对象,g_CriticalSection.Lock();3、 访问共享资源后,则放弃临界区对象,g_CriticalSection.Unlock(); 2、 事件(CEvent)事件机制,则允许一 阅读全文
posted @ 2014-03-26 13:08 zzyoucan 阅读(6736) 评论(1) 推荐(2)
摘要:STL 主要是由 containers(容器),iterators(迭代器)和 algorithms(算法)的 templates(模板)构成的. 对应于它们所支持的操作,共有五种 iterators(迭代器)。 input output \ / forward | bidirectional | random access ... 阅读全文
posted @ 2014-03-25 21:49 zzyoucan 阅读(601) 评论(0) 推荐(0)
摘要:std::shared_ptr m_spThread;m_spThread.reset(new std::thread(std::bind(&GameServer::process_thread, this)));void GameServer::process_thread(){try{proce... 阅读全文
posted @ 2014-03-25 10:21 zzyoucan 阅读(2557) 评论(0) 推荐(0)
摘要:举个例子:sendmessage()同步,postmessage()就是异步的而对于阻塞与非阻塞个人认为是一种程序的状态,如果调用的函数或者操作不能返回就被阻塞住了,如果能立即返回就不阻塞了,细节可以看看操作系统。注意阻塞和sleep一样都会让出cpu给别的线程执行。 阅读全文
posted @ 2014-03-24 23:56 zzyoucan 阅读(268) 评论(1) 推荐(0)
摘要:thread detach, join线程有两种状态,joinable或者detachable,pthread默认创建的线程是joinable的,也可以指定atrribute创建成一个detachable的线程。一个线程被创建后,最终一定要调用join或者detach(或者设置成detachable),以保证最后线程的资源会得到回收。对于一个joinable的线程,join它后要等到它执行结束,调用线程才能继续向前运行。如果调用线程既希望被创建的线程资源回收,又不会被阻塞在join,那怎么办呢,调用detach,让其自动回收。join:主线程被阻塞 detach:会分离,子线程自动回收资源 阅读全文
posted @ 2014-03-24 17:53 zzyoucan 阅读(5828) 评论(0) 推荐(0)
摘要:进程三个基本状态:就绪、阻塞、运行这个比较简单,进程创建后进入就绪状态、然后若CPU空闲或能打断CPU正在执行的进程(优先级低的),那么就绪状态转换成运行态,运行时,进程需要用到其他资源,但不能立即获得的话,那么运行太会转换到阻塞态,等待资源的获取,当资源获取后,阻塞太就会转换成就绪态,然后看CPU情况而定是否转换成运行态,进程执行完后就转换成了停止态。五状态(多了就绪挂起和阻塞挂起)这种不是太确定,至于什么是挂起,从网上没有搜到太明确的说明,有一种说明是进程从内存中调到了外存中(页中断)。上个图说明吧。这里关键是不知道为什么扶起,至于是不是内存调试的原因,还有待进一步查资料。在五状态中,对于 阅读全文
posted @ 2014-03-24 16:14 zzyoucan 阅读(992) 评论(0) 推荐(0)
摘要:经常看到线程中用sleep(),到底是什么用处,下面讲的比较通俗:我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会 不会被唤醒?某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0) 。既然是 Sleep 0 毫秒,那么他跟去掉这句代码相比,有啥区别么?我们先回顾一下操作系统原理。操作系统中,CPU竞争有很多种策略。Uni 阅读全文
posted @ 2014-03-24 16:12 zzyoucan 阅读(374) 评论(0) 推荐(0)
摘要:void f(int p*)void f(int p[])void f(int p[4])对于传递数组类型的参数,一直很晕,其实以上三者是相同的,c语言中不能传递数组,只能传递第一个元素的地址,所以c语言在函数中没有数据越界方面的保护机制,所以可以额外的传递一个表示大小的参数,还可以这样void f(int (&p)[12]),这个p表示指向数组的指针,数组大小是12,我是这样理解的。数组有两个特殊的性质。一是不能复制数组;二是使用数组名字时,数组会自动转化为指向其第一个元素的指针。由于数组不能复制,所以无法编写使用数组类型形参的函数,因为数组会被自动转化为指针。 数组形参是个容易出问 阅读全文
posted @ 2014-03-23 18:24 zzyoucan 阅读(1151) 评论(0) 推荐(0)
摘要:1.char *s1 = "ssss";2.char s2[] = "bbbb";对于第一种,我是无法理解,无法想象字符串赋值给一个char类型的指针,查了一番貌似这样,不是把字符串的指针给s1,而是字符串第一个字符的地址,对于c标准库的string.h的函数strcpy(char *dest,const char* src),好像也能把第二个参数以""这样的字符代替,估计取得也是第一个字符的首地址,"ssss"存储在程序的常量区,不可变,指针在栈中,可以变,这种关系很微妙2.第二种完全是数组,但s2是不能改变的, 阅读全文
posted @ 2014-03-23 18:00 zzyoucan 阅读(933) 评论(0) 推荐(0)
摘要:int a[3],这个a到底是什么?每次遇到c语言的这些东西,总是把我绕一把,搞的晕网上说法很多,暂时理解:首先他不是一个指针(网上也有说他是int const*),是个常量,他的值和&a[0]相等,也指向了数组的第一个元素,&a是数组的地址,数组的地址真好和数组的第一个元素的地址相等,所以&a = &a[0],反正记得是第一个元素的地址就行了,所以才能通过a[8],这样同偏移量寻址,知道第8个元素 阅读全文
posted @ 2014-03-23 02:27 zzyoucan 阅读(193) 评论(0) 推荐(0)
摘要:这个问题总是讨论,有时又被弄晕了,特来复习一下int i = 0; int s = ++i+4; cout<<s<<endl;cout<<5,而i+++4返回4,其实这样的i++先运算,再加,++i先加再运算,就是这样而马上想到i+++i多少?其实这个测试是0,其实这个与顺序点和求值顺序有关:具体看这个:经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout << a 阅读全文
posted @ 2014-03-23 01:26 zzyoucan 阅读(658) 评论(0) 推荐(0)
摘要:std::shared_ptr:多个指针指向同一对象,一起操作没问题,意思是你可以把这个指针复制给别人,最后一个指针退出时,对象自动清除std::bind返回函数指针,std::function m_timeout_disconnect; 返回值void ,一个参数是__int64类型的m_timeout_disconnect =std::bind(&GameServer::timeout_disconnect, this, std::placeholders::_1);std::placeholders::_1:表示调用函数对象的第一参数,如m_timeout_disconnect( 阅读全文
posted @ 2014-03-21 15:47 zzyoucan 阅读(162) 评论(0) 推荐(0)

上一页 1 ··· 9 10 11 12 13 14 15 下一页