跟我一起学Linux-线程创建,类似FreeRTOS创建任务
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(1) { printf("子线程:Hello,world!\r\n"); sleep(2); } } int main() { int err; err = pthread_create(&main_tid, NULL, func, NULL); //创建线程 if(err != 0) { printf("create thread error: %s/n",strerror(err)); return 1; } 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 0; }
函数一: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()
返回值:目前进程的进程ID
函数四:pthread_self函数作用:获得线程自身的ID。
函数五: sleep,类似FreeRTOS的vTaskDelay
- sleep的精度是秒
- 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 过程 如下 # 1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。 # 2、如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件。 # 3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。 # 4、如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程) # 5、当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。 # 根据Makefile 的过程1。应该第一步:在所在的thread.c 文件路径下,新建一个文件名字为 Makefile”或“makefile”的文件。 # 根据Makefile 的过程2、3。应该第二步:用 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