1、参考学习大神网址:http://blog.csdn.net/ithomer/article/details/6063067

#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h> pthread_t main_tid; void *func(void *arg)
{
while()
{
printf("子线程:Hello,world!\r\n"); sleep();
}
} int main()
{
int err; err = pthread_create(&main_tid, NULL, func, NULL); //创建线程 if(err != )
{
printf("create thread error: %s/n",strerror(err));
return ;
} printf("main thread: pid: %u tid: %u (0x%x)/n",
(unsigned int)getpid(),
(unsigned int)pthread_self(),
(unsigned int)pthread_self());
/* while(1)
{
printf("主线程:Hello,world!\r\n"); sleep(2);
} */ return ;
}

函数一:pthread_create

函数声明

int pthread_create(pthread_t *restrict_tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);

返回值

若成功则返回0,否则返回出错编号!!!

参数

pthread_t *restrict_tidp:   第一个参数为指向线程标识符的指针。

const pthread_attr_t *restrict_attr:    第二个参数用来设置线程属性。

void*(*start_rtn)(void*):     第三个参数是线程运行函数的起始地址。

void *restrict arg:        最后一个参数是运行函数的参数。

另外

在编译时注意加上-lpthread参数,以调用静态链接库。因为pthread并非Linux系统的默认库.

函数二:strerror(int errnum

errnum:错误标号,通常用errno(标准错误号,定义在errno.h中)

通过标准错误的标号,获得错误的描述字符串 ,将单纯的错误标号转为字符串描述,方便用户查找错误。

函数三:getpid()

    函数说明:getpid函数用来取得目前进程的进程ID,许多程序利用取到的此值来建立临时文件,以避免临时文件相同带来的问题。
    返回值:目前进程的进程ID
 
   函数四:pthread_self函数作用:获得线程自身的ID。
 
     函数五: sleep,类似FreeRTOS的vTaskDelay
    1. sleep的精度是秒
    2. usleep的精度是微妙,不精确

Makefile:编写如下:

  
# 参考大神博客地址:http://blog.csdn.net/haoel/article/details/2887
# http://www.cnblogs.com/sld666666/archive/2010/04/08/1707789.html
# 为每一个 *.c文件生成 *o文件。
  # 连接每一个*.o文件,生成可执行文件。
# make 过程 如下
# 、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
# 、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。
# 、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。
# 、如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程)
# 、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。 # 根据Makefile 的过程1。应该第一步:在所在的thread.c 文件路径下,新建一个文件名字为 Makefile”或“makefile”的文件。
# 根据Makefile 的过程2、。应该第二步:用 vim 打开 Makefile文件,第一行写代码 edit : thread.o edit:thread.o #可执行文件edit 由 thread.o 组成(对Makefile来说 这个edit 就是最终的目标文件,即执行文件)
gcc -o edit thread.o # 这句代码的意思是:将thread.o连接成可执行的二进制文件edit 参考GCC语法:http://blog.csdn.net/tomatofly/article/details/6035363
thread.o:thread.c # 这句代码的意思是:thread.o依赖关系是 thread.c 和 stdio.h 两个文件,也就是说 如果这两个文件有一个改动的,thread.o就会被重新编译
gcc -c thread.c # 这句代码的意思是:只编译thread.c,成功时输出目标文件thread.o 参考GCC语法:http://blog.csdn.net/tomatofly/article/details/6035363

跟我一起学Linux-线程创建,类似FreeRTOS创建任务的更多相关文章

  1. linux线程笔记1之创建线程

    1 线程与进程的对比 这里有一个笔记详细的阐述 http://blog.csdn.net/laviolette/article/details/51506953 2 创建线程函数 int pthrea ...

  2. [笔记]linux下和windows下的 创建线程函数

    linux下和windows下的 创建线程函数 #ifdef __GNUC__ //Linux #include <pthread.h> #define CreateThreadEx(ti ...

  3. Linux线程-创建

    Linux的线程实现是在内核以外来实现的,内核本身并不提供线程创建.但是内核为提供线程[也就是轻量级进程]提供了两个系统调用__clone()和fork (),这两个系统调用都为准备一些参数,最终都用 ...

  4. 三十六、Linux 线程——线程基本概念及线程的创建和终止

    36.1 线程介绍 36.1.1 线程的基本概念 进程是资源管理的最小单位,线程是程序执行的最小单位 每个进程都有自己的数据段.代码段和堆栈段. 线程通常叫做轻型的进程,它包含独立的栈和 CPU 寄存 ...

  5. 十天学Linux内核之第七天---电源开和关时都发生了什么

    原文:十天学Linux内核之第七天---电源开和关时都发生了什么 说实话感觉自己快写不下去了,其一是有些勉强跟不上来,其二是感觉自己越写越差,刚开始可能是新鲜感以及很多读者的鼓励,现在就是想快点完成自 ...

  6. 十天学Linux内核之第二天---进程

    原文:十天学Linux内核之第二天---进程 都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲 ...

  7. linux线程的实现

    首先从OS设计原理上阐明三种线程:内核线程.轻量级进程.用户线程 内核线程 内核线程就是内核的分身,一个分身可以处理一件特定事情.这在处理异步事件如异步IO时特别有用.内核线程的使用是廉价的,唯一使用 ...

  8. linux线程的实现【转】

    转自:http://www.cnblogs.com/zhaoyl/p/3620204.html 首先从OS设计原理上阐明三种线程:内核线程.轻量级进程.用户线程 内核线程 内核线程就是内核的分身,一个 ...

  9. Linux线程学习(一)

    一.Linux进程与线程概述 进程与线程 为什么对于大多数合作性任务,多线程比多个独立的进程更优越呢?这是因为,线程共享相同的内存空间.不同的线程可以存取内存中的同一个变量.所以,程序中的所有线程都可 ...

随机推荐

  1. Tomcat配置连接c3p0连接池

    一.Tomcat配置JNDI资源 JNDI(Java Naming and Directory Interface),Java 命名和目录接口. JNDI的作用就是:在服务器上配置资源,然后通过统一的 ...

  2. Java与C++区别:重载(Overloading)

    Java中一个类的函数重载可以在本类中的函数和来自父类中的函数之间进行,而C++类中的函数重载只能是本类中的(即不包括来自父类的函数),这是他们一个非常重要的区别.在其他方面的要求都是一致的,即要求函 ...

  3. 关于html 中form表单的内标签和使用

    表单标记 1.普通文本框: <input type=”text” name=”名称” value=”值”;不写value默认为空/> 2.密码框:<input type=”passw ...

  4. css权威指南读书笔记-第10章浮动和定位

    这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮 ...

  5. Oracle 通过出生日期计算年龄

    方法一: SELECT TRUNC(months_between(sysdate, birth)/12) AS age from mytable 方法二: select TRUNC((to_char( ...

  6. <Android Framework 之路> N版本 Framework Camera的一些改动

    前言 Android N版本最近发布,Nougat是否好吃,不得而知,慢慢看下~ 感谢AndroidXref这个网站,给开发者提供了大量的便捷~以后学习Android就靠它了. N版本上Framewo ...

  7. 反射报错java.lang.IllegalArgumentException: wrong number of arguments

    class Person{ private String name ; private String sex ; public Person(){ System.out.println("c ...

  8. 2.MySQL 数据类型

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...

  9. cocos2dx加载骨骼动画,获取骨骼位置

    2015/05/13 需求: (1)希望在骨骼上绑定一个粒子特效 (2)获取骨骼的位置 (3)获取骨骼动画的大小 (4)lua 1. cocostudio动画编辑器 (1)绑定粒子特效(跟随骨骼的移动 ...

  10. 【转】15个必须知道的chrome开发者技巧

    一.快速切换文件 如果你使用过sublime text,那么你可能不习惯没有Go to anything这个功能的覆盖.你会很高兴听到chrome开发者功能也有这个功能,当DevTools被打开的时候 ...