36,UC(15)

来源:互联网 发布:更换ip地址软件 编辑:程序博客网 时间:2024/05/08 00:36

 /*
 达内学习 UC day35 2013-10-21
*/
回顾:
 网络编程(socket编程)
 TCP开发/UDP开发
 TCP开发 步骤
 server端:
 1 socket得到socket描述符 
 2 准备通信地址(struct sockaddr_in)
 3 绑定bind
 4 监听listen() 设置最大等待队列
 5 等待客户端链接(阻塞) accept(), 返回新的描述符
 6 读写 read() write() send() recv()
 7 关闭
 client端:
 1 socket()得到描述符
 2 准备通信地址(服务器端)
 3 链接服务器connect()
 4 读写交互
 5 关闭
 UDP开发步骤
 serve:
 1 socket得到描述符,type参数取SOCK——DGRAM
 2 准备通信地址
 3 绑定
 4 读写交互 sendto() recvfrom() read()
 5 关闭
 client:
 1 socket得到描述符
 2 准备通信地址
 3 读写交互
 4 关闭
//=========================================================================================
今天:
UDP应用开发 - 时间服务器
线程 - 线程原理 、unix/linux线程api、线程同步
time_t time(0)
struct tm 可以得到想要的效果
time_t 如何转换struct tm 用localtime()函数
man  time.h 或locattime()  练习:实现linux时间服务器
要求:客户发送请求,服务端返回时间字符串  格式2013-10-21 09:57:35(sprintf) ,并把时间字符串返回客户端。在客户端打印出来。支持多客户端访问

线程:主流操作系统基本都支持多任务并行,通过多进程实现多任务,每个进程内部通过多线程实现代码并行
进程,重量级,进程需要拥有完全独立的内存空间 
线程,轻量级,不需要独立拥有自己的内存空间,共享所属进程的相关资源(代码区,全局,堆,文件和目录,其他资源)
每个线程独立拥有自己的栈空间即可。
在需要代码并行的时候需要使用线程。
线程的原理:程序的运行需要内存和CPU,多线程可以同时运行(并行),内存可以分,每个线程都可以获得内存,单个CPU不可分,多个线程其实只有一个CPU
    CPU效率很高,CPU分时间片,多个线程轮换执行,占用时间片。
线程的实现: 线程的开发,在POSIX0规范中有定义,需要头文件。pthread.h,函数在libpthread.so中,因此在链接时候,需要-lphtread /-pthread
线程相关的函数都以pthread_开头
创建启动函数:pthread_create()
int pthread_create(pthread_t* id,pthread_attr_t* attr,void* (*func)(void*),void* arg)
参数:(4个指针类型)
id:指向线程的ID,线程以线程ID作为唯一标志
attr:指向线程的属性,一般给0(默认)
func: 线程执行的函数指针
arg:是func的参数,因为函数指针无法传递参数
执行线程代码时,实际执行的效果是:func(arg)
返回:成功返回0,失败返回错误码,线程相关函数的错误不使用errno,而是直接返回

每个进程内部可以创建多线程,多线程之间的关系是:相互独立,又相互影响
每个进程都必须存在一个主线程(main函数就是一个主线程),主线程负责启动其他线程(直接启动和间接启动),但其他线程一旦启动,和主线程就是并行
主线程结束,会导致进程结束,进程结束导致所有线程结束。尽量确保主线程最后结束。
多线程之间乱序执行,每个线程内部是顺序执行
pthread_self(); //取当前线程ID

线程的返回值, 用pthread_joid()可以获得
int pthread_join(pthread_t id,void** returnvalue);
如果想获取返回值传二级指针,如果不想直接传0即可
pthread_join会让当前线程等待线程id的结束

线程正常终止
 1 线程自己调用phtead_exit()
 void pthread_exit(void* raval_ptr)
 real_ptr:线程退出返回的指针,进程中其他线程可以调用pthread_exit
 2 在线程函数中执行return 
 注:正常终止线程可以用pthread_join()取返回值
线程非正常终止
 1 被其他线程干预
 2 线程出错
 注:exit() 退出进程,pthread_exit()退出线程

原创粉丝点击