网站错误代码 处理,怎么做中英文双语网站,怎么制作网站编辑页面,微信公众号开发文档一、前情回顾
chdir();功能#xff1a; 函数用于改变当前进程的工作目录。 参数#xff1a;路径#xff08;Path#xff09;#xff1a;这是一个字符串参数#xff0c;表示要切换到的目标目录的路径。 返回值#xff1a; 成功#xff1a;在成功改变当前工作目…一、前情回顾
chdir();功能 函数用于改变当前进程的工作目录。 参数路径Path这是一个字符串参数表示要切换到的目标目录的路径。 返回值 成功在成功改变当前工作目录时chdir() 函数通常返回0 失败如果因为某些原因如路径不存在、权限不足等无法改变目录chdir() 函数将返回一个错误码在C语言中如-1
二、线程 轻量级进程 线程是cpu任务调度的最小单位
1.线程的创建 线程由某个进程创建从属于某个进程。 1.1内容 由所在进程为其分配独立的的栈区空间(默认8M),其他空间堆区、数据区、文本区共享给所有线程内核存储线程控制块。 1.2特点 线程是cpu任务调度的最小单位 进程是操作系统资源分配的最小单位
1.3线程与进程的区别
1.线程是cpu任务调度的最小单位 进程是操作系统资源分配的最小单位
2.线程是一个轻量级的进程所在进程为其分配独立的栈区空间
3.资源消耗进程线程
4.效率角度线程的创建速度进程 线程任务切换进程
5.安全角度多进程多线程 各个进程相互独立线程资源共享
6.通信角度多线程多进程 线程间数据共享更方便进程是独立的需要使用进程间通信的通信方法。 2.线程的调度 宏观并行微观串行 操作系统调度 3.线程的消亡
3.1线程的消亡
3.2回收线程
return , pthread_exit() 4.编程
#include pthread.h
编译链接 -pthread
int pthread_create(pthread t *thread, const pthread_attr_t *attrvoid *(*start routine)(void*),void *arg);功能创建一个线程在被调的进程中 参数 pthread t *thread:保存线程ID的变量的地址 const pthread_attr_t *attr设置线程属性对象的地址 NULL:按照线程默认属性去创建 void *(*start routine)(void*)回调函数线程启动后需要执行的任务的入口地址 void *arg作为回调函数的参数被传参。 返回值 成功0 失败!0
pthread_t pthread_self(void);功能获得线程的tid号 返回值 总是成功tid
int pthread_join(pthread_t thread,void **retval);功能阻塞等待回收线程资源(回收非分离属性的线程) 参数 thread需要回收的线程tid retval: 线程退出时传递给回收线程的参数 返回值 成功0 失败0
void pthread_exit(void*retval);功能退出一个线程 参数指向返回值的指针 对于创建线程的进程无合适机会回收线程资源时可以将线程设置成具有分离属性的线程。
线程属性
线程的分离属性线程结束时不需要其他线程回收会被操作系统自动回收。//孤儿进程
线程的非分离属性可以被其他线程回收或者结束。pthread_join或者结束 //僵尸进程
设置线程的分离属性
1.定义线程属性对象 pthread_attr attr
2.初始化线程属性对象 int pthread_attr_init(pthread_attr_t *attr)
3.设置线程的分离属性 int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate) PTHREAD_CREATE_DETACHED
4.以分离属性创建线程 int pthread_create(..., const pthread_attr_t *attr...);
5.销毁线程属性对象 int pthread_attr_destroy(pthread_attr_t *attr) 5.线程之间的通信
通过pthread_create给线程任务传参
int num10;
pthread_create(,,,num);void *fun(void *arg)
{int fnum *(int *)arg;
}
全局变量的方式线程间通信 三、补充
1. 函数指针 一个指向函数的指针
2. 函数指针定义 函数 void funint a int b 函数返回值类型 *指针名称函数的形参表 定义了一个叫做指针名称函数指针。 指针void *pfunint int
3. 给函数指针赋值 初始化 void *pfunint int fun//int *p a 赋值 void *pfunint int // int *p pfun fun // p a;
4. 函数指针数组 把多个函数的地址组织存储在一个数组中 定义一个指针数组 char * arg[5] {NULL}; 函数指针数组 void *arg[5]int int; 对数组进行初始化 void *arg[]int int {fun fun1 fun2} ; 通过typedef重命名函数指针类型 typedef int U32 函数指针类型void *int int // int * typedef void (*Pfun_t)(int int); 将函数指针类型重命名成Pfun_t类型 Pfun_t arr[5]; 函数指针数组 把多个函数的地址组织存储在一个数组中 定义一个指针数组: char * arg[5]; 定义一个函数指针数组 对函数指针数组初始化 void *argv[](int ,int) void *argv[5](int ,int){fun,fun1,fun2……} 通过typedef重命名函数指针类型 typedef int U32 函数指针类型void (*)(int int); typedef voidun_t)(int int)//将函数指针类型重命名成Pfun_t类型