基于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(<));
pthread_exit("New Thread Finished!\n"); //结束调用这个函数的进程
}
=======================温馨提示===============================
编译时记得链接pthread库 哦。。命令如下
gcc -pthread 文件名 -o 目标文件名
- 基于Linux的 线程的简单应用
- linux下的最简单的线程应用代码
- 基于操作系统的简单应用
- 基于操作系统的简单应用
- 基于BootstrapTable的简单应用
- 基于线程池的简单Web服务器
- iOS编程中线程的应用以及线程简单应用
- 基于Apache Mina的一个简单应用
- 基于JPA的Hibernate->CRUD(简单应用)
- mybatis的简单应用(基于配置文件)
- 基于Swing的简单应用(计算器)
- 基于xslt的简单应用开发
- C#中线程池的简单应用
- Java线程池CompletionService的简单应用
- java线程优先级的简单应用
- 简单的聊天应用,分析线程问题
- Java线程池的简单应用
- 基于java的linux线程监控
- bridge-nf-call-iptables
- 一段PHP版本的lambda实现
- ArrayList、Iterator的remove方法
- [博弈dp] hdu 4778 Gems Fight!
- Eclipse轻松玩转SmartFramework
- 基于Linux的 线程的简单应用
- 为什么要用非关系型数据库
- disconnected no supported authentication methods available(server sent: publickey,keyboard interae)
- JAVA程序实现 maven本地jar包安装
- 【ZZ】神与学霸的区别
- LeetCode 151 Two Sum
- POJ 2533 Longest Ordered Subsequence(LIS:最长上升子序列)
- intent和intent-filter
- Java计算文件的MD5值