基于Linux的 线程的简单应用

来源:互联网 发布:yyf的淘宝店是哪个 编辑:程序博客网 时间:2024/05/24 06:59

首先,我们先来谈谈怎样创建和关闭线程。(关于线程的作用和意义这里不再赘诉)


进程的创建一般由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(&lt));
pthread_exit("New Thread Finished!\n"); //结束调用这个函数的进程


}

=======================温馨提示===============================

编译时记得链接pthread库 哦。。命令如下

gcc -pthread 文件名 -o 目标文件名

0 0
原创粉丝点击