线程的使用就要先创建!线程的创建也是一个学问,请听dyli向你慢慢道来。请看下面代码:
1、主要函数代码 thread_create.c
- /* Name thread_create.c
- * Author dyli
- * date 20110615
- * Description 处理getpid()、pthread_self()、pthread_create()函数,
- * 并进行讨论主子线程的问题
- * */
- #include<stdio.h>
- #include<pthread.h>
- #include<string.h>
- #include<sys/types.h>
- #include<unistd.h>
- /***getpid()函数************************************************
- * 函数功能: 取得进程ID
- * 函数原型:
- * 返回值 :
- *
- * 所需库 :
- * 备注 :
- ****************************************************************/
- /***pthread_self()函数*******************************************
- * 函数功能: 获取当前线程的ID
- * 函数原型: pthread_t pthread_self(void)
- * 返回值 :
- *
- * 所需库 : <pthread.h>
- * 备注 : pthread_t的类型为unsighned long int,打印时用 %u/%lu,
- * 否则显示结果出问题
- *****************************************************************/
- /***pthread_create()函数******************************************
- * 函数功能: 创建线程
- * 函数原型:
- * 参数一 指向线程TID指针
- * 参数二 设置线程默认属性,NULL则默认
- * 参数三 线程内要运行的函数的起始地址
- * 参数四 运行的函数的参数,一般为NULL
- *
- * 返回值 :
- *
- * 所需库 : <phthead.h>
- * 备注 :
- ****************************************************************/
- /********pthread_t类型*******************************************
- pthread_t
- 重定义类开 : typedef long int pthread_t
- 用途 : 用于声明线程TID
- 长度 : sizeof(pthread_t)=4
- ****************************************************************/
- pthread_t ntid;
- /*******************
- *打印ID信息:PID TID
- ********************/
- void print_id_mes(const char *s){
- pid_t pid;
- pthread_t tid;
- pid = getpid(); // -------------------------------------------------------->func1获取进程PID
- tid = pthread_self();// --------------------------------------------------->func2获取线程TID
- printf("%s pid %u tid %u (0x%x)\n\n",s,(unsigned int)pid,(unsigned int)tid,(unsigned int)tid);
- printf("use 百分之d to print tid = %d,this is a mess Num!!! \n\n",(unsigned int)tid);
- }
- /*******************
- *thr_fn 新创建的线程所调用的函数
- ********************/
- void *thr_fn(void *arg){
- print_id_mes("this is new thread:");//先被子线程调用
- return ((void *)0);
- }
- /******************************************
- 进程的主线程
- 当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,
- 该线程通常叫做程序的主线程(Main Thread),因为它是程序开始时就执行的,如果你需要
- 再创建线程,那么创建的线程就是这个主线程的子线程。每个进程至少都有一个主线程,
- 在Winform中,应该就是创建GUI的线程。
- 主线程的重要性体现在两方面:
- 1.是产生其他子线程的线程;
- 2.通常它必须最后完成执行比如执行各种关闭动作。
- *****************************************/
- int main(){
- int err;
- err = pthread_create(&ntid,NULL,thr_fn,NULL);//---------------------------->func3创建线程
- if(err != 0){//--------------------------->这里说明返回0表示创建线程成功!
- printf("can't create thread: %s\n",strerror(err));
- return 1;
- }
- print_id_mes("this is main thread:");//后被主线程调用
- sleep(1);
- return 0;
- }
2、本程序的执行效果如下
- [root@localhost thread_create]# ./thread_create
- this is new thread: pid 10222 tid 3087928208 (0xb80e0b90)
- use 百分之d to print tid = -1207039088,this is a mess
- this is main thread: pid 10222 tid 3087931072 (0xb80e16c0)
- use 百分之d to print tid = -1207036224,this is a mess
3、主要代码文件
阅读(6980) | 评论(0) | 转发(0) |