摘要: 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 阅读(5790) 评论(0) 推荐(0) 编辑
摘要: 进程三个基本状态:就绪、阻塞、运行这个比较简单,进程创建后进入就绪状态、然后若CPU空闲或能打断CPU正在执行的进程(优先级低的),那么就绪状态转换成运行态,运行时,进程需要用到其他资源,但不能立即获得的话,那么运行太会转换到阻塞态,等待资源的获取,当资源获取后,阻塞太就会转换成就绪态,然后看CPU情况而定是否转换成运行态,进程执行完后就转换成了停止态。五状态(多了就绪挂起和阻塞挂起)这种不是太确定,至于什么是挂起,从网上没有搜到太明确的说明,有一种说明是进程从内存中调到了外存中(页中断)。上个图说明吧。这里关键是不知道为什么扶起,至于是不是内存调试的原因,还有待进一步查资料。在五状态中,对于 阅读全文
posted @ 2014-03-24 16:14 zzyoucan 阅读(959) 评论(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 阅读(358) 评论(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 阅读(1130) 评论(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 阅读(910) 评论(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 阅读(179) 评论(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 阅读(645) 评论(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 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 想起了原来和我哥去放牛的事,很多次和我哥去放牛,那时候还是每家临着放,我家是三天,每次买点吃的冰棒,或者带副牌教我打,或者钓鱼,有时候到他旁边的同学家玩,想想那段时间确实很快乐,自从大学毕业以后,我想想我的最快乐的时光已经过去了,但我的青春又才刚刚开始,这是个蛋疼的问题。 阅读全文
posted @ 2014-03-20 23:40 zzyoucan 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 多个线程是“同时”执行的多个任务;定时可以看作是在本线程内插入的任务。如果需要多个任务同时执行,就要用多线程;如果需要每隔一段时间做某件事就用定时。多线程相对复杂一些,占用系统资源略多一些,所以如果能不用多线程时尽量不用。定时器和多线程没啥关系,定时器是一个线程中的任务 阅读全文
posted @ 2014-03-19 16:35 zzyoucan 阅读(1903) 评论(0) 推荐(0) 编辑