• 跟我一起学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!
    ");
             
             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!
    ");
             
             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()

        函数说明: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 过程 如下
        # 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

     

  • 相关阅读:
    PCB设计流程
    第一次PCB画板实战MiniDVPart1/3
    程序人生
    MCU死掉了
    一花一世界,一码一人生,谓之程序人生
    神船·神舟
    程序猿的选择
    android得到strings.xml文件中的内容
    Android特效 五种Toast详解
    Java字符串转换为日期和时间比较大小
  • 原文地址:https://www.cnblogs.com/suozhang/p/6594605.html
Copyright © 2020-2023  润新知