赞
踩
我们打开一个聊天软件,这就是开启了一个进程
当我们在软件里面打开一些功能,比如空间, 扫一扫, 设置…,这些操作就是线程
所以可以说 “进程” 包含 “线程”, “线程” 是 “进程” 的子集
1. pthread_create **原型** #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg); **功能** 凡是使用pthread_create注册的线程,都是次线程,次线程会和主线程一起并发运行。 谁是主线程? main函数的那条线就是主线程,如果一个次线程都没有创建的话,整个进程就只有一个主线程,这个主线程也是整个进程。 **参数** thread:存放线程的TID。 attr:用于设置线程属性,设置线程属性的目的是为了实现某些特殊功能,如果设置为NULL,表示不设置特有的属性,使用线程默认属性所提供的功能即可。正常情况下,线程默认属性所提供的功能就已经够用了,所以这个参数我们都是设置为NULL。 start_routine:要注册为线程的函数地址 函数类型为void *(*) (void *),pthread_create它会把这个函数注册为线程,如果不注册,线程函数就是一个普通的函数。 线程函数需要我们自己定义,比如: void *pth_fun(void *pth_arg) { ...//线程要做的事情 } pth_fun和pth_arg的命名由自己决定。 arg:传递给线程函数的参数,这个参数会传递给pth_arg,如果参数很多的话,我们做成一个结构体,然后把结构体变量的地址传过去。如果你不想传递参数的话,你可以设置为NULL。 **返回值** 成功返回0,失败返回非零错误号。 1. pthread_cancel **原型** #include <pthread.h> int pthread_cancel(pthread_t thread); **功能** 当次线程是死循环时,可以调动这个函数主动取消次线程。 **参数** thread:要取消线程的TID 返回值 成功返回0,失败返回非零错误号。
void print_fn(const char* s) { pid_t pid; pthread_t tid; pid = getpid();//进程id tid = pthread_self();//线程id printf("%s pid %u ,and tid %u\n", s, (unsigned int)pid, (unsigned int)tid); } void* new_pthread(void* arg) { print_fn("I am a new pthread: "); return NULL; } //一个进程 多个线程 void pthreadtest() { pthread_t tid; int err; err = pthread_create(&tid, NULL, new_pthread, NULL); if (err != 0) { printf("occurs error while create new pthread: %s\n", strerror(err)); } print_fn("Main thread: "); pthread_join(tid, NULL); //阻塞等待tid为thread的次线程结束 }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。