首先,我们先来谈谈怎样创建和关闭线程。(关于线程的作用和意义这里不再赘诉)
进程的创建一般由fork( )函数来完成,而线程的创建函数是 pthread_create( )函数完成
pthread_create( )函数的声明如下:
int pthread_create(pthread_t *thread , const pthread_attr_t *attr , void*(*start_routime) (void *) , void *arg);
thread ---指向线程标识符的指针
attr ---- 设置线程属性 (设置为NULL则生成默认属性的线程)
start_routime ---指向线程调用函数
arg ----线程运行函数的参数 (如果调用函数不需要参数则可设为NULL)
线程的创建比较单一,但是结束有多种方式:比如运行函数结束线程 比如同一进程下的其他线程结束等
运行函数结束线程可使用 pthread_exit( )
声明如下:
void pthread_exit(void *rval_ptr); rval_ptr ----为函数的返回代码,相当于线程的退出码
同一进程下的其他线程结束可使用 pthread_cancel ( )
声明如下;
int pthread_cancel(pthread_tid); tid ----为线程标识符
还有一个与线程终止相关的函数 pthread_join( )
声明如下:
int pthread_join( pthread_t pthread , void **return_ptr ) pthread---线程标识符 return_ptr --- 指向结束线程的返回值的二级指针
下面的例子是创建一个线程并调用函数显示系统当前的日期及时间
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
#include <pthread.h>
void *Print_CurrentTime(void); //声明函数
int main()
{
int ret;
void *thread_result; //定义一个指向结束线程的返回值的指针
pthread_t new_thread; //定义一个指向线程标识符的指针
ret = pthread_create(&new_thread,NULL,Print_CurrentTime,NULL); //创建线程并返回一个值
if(ret != 0)
{
perror("Thread Creation Failed!\n");
exit(EXIT_FAILURE);
}
printf("waiting for new thread...\n");
ret = pthread_join(new_thread,&thread_result);//(结束线程)在主线程中阻塞等待线程标示符是thread的线程结束
if(ret != 0) //不等0则表示 pthread_join 失败
{
perror("Thread Join Failed!");
exit(EXIT_FAILURE);
}
printf("Thread Joined,returned:%s\n",(char *)thread_result);
return 0;
}
void *Print_CurrentTime(void)
{
time_t lt;
lt = time(NULL);
printf("Current Time:%s",ctime(<));
pthread_exit("New Thread Finished!\n"); //结束调用这个函数的进程
}
=======================温馨提示===============================
编译时记得链接pthread库 哦。。命令如下
gcc -pthread 文件名 -o 目标文件名