linux下的C语言开发(线程等待)

linux下的C语言开发(线程等待),第1张

姓名:冯成  学号:19020100164  学院:丁香二号书院

转自: https://feixiaoxing.blog.csdn.net/article/details/7240833

【 嵌牛导读 】本文将介绍linux下的C语言开发中的线程等待

【 嵌牛鼻子 】linux C语言 线程等待

【 嵌牛提问 】linux下的C语言开发中的线程等待是什么?

和多进程一样,多线程也有自己的等待函数。这个等待函数就是pthread_join函数。那么这个函数有什么用呢?我们其实可以用它来等待线程运行结束。

#include <stdio.h>

#include <pthread.h>

#include <unistd.h>

#include <stdlib.h>

void func(void* args)

{

    sleep(2)

    printf("this is func!\n")

}

int main()

{

    pthread_t pid

    if(pthread_create(&pid, NULL, func, NULL))

    {

        return -1

    }

    pthread_join(pid, NULL)

    printf("this is end of main!\n")

    return 0

}

    编写wait.c文件结束之后,我们就可以开始编译了。首先你需要输入gcc wait.c -o wait -lpthread,编译之后你就可以看到wait可执行文件,输入./wait即可。

[test@localhost thread]$ ./thread

this is func!

this is end of main!

1、启动后台子任务,在执行命令后加& *** 作符,表示将命令放在子shell中异步执行。可以达到多线程效果。如下,sleep10#等待10秒,再继续下一 *** 作sleep10当前shell不等待,后台子shell等待。

2、wait命令wait是用来阻塞当前进程的执行,直至指定的子进程执行结束后,才继续执行。使用wait可以在bash脚本“多进程”执行模式下,起到一些特殊控制的作用。

sleep()函数大概只能精确到50ms左右,你用sleep(10)是肯定不行的,如果你要精确的定时的话可以使用QueryPerformanceFrequency()函数,用法为:

LARGE_INTEGER litmp

LONGLONG QPart1,QPart2

double dfMinus, dfFreq, dfTim

QueryPerformanceFrequency(&litmp)

dfFreq = (double)litmp.QuadPart// 获得计数器的时钟频率

QueryPerformanceCounter(&litmp)

QPart1 = litmp.QuadPart// 获得初始值

do

{

QueryPerformanceCounter(&litmp)

QPart2 = litmp.QuadPart//获得中止值

dfMinus = (double)(QPart2-QPart1)

dfTim = dfMinus / dfFreq// 获得对应的时间值,单位为秒

}while(dfTim<0.001)

其定时误差不超过1微秒,精度与CPU等机器配置有关。

×××××××××××××××××××××××××

sleep()函数的中等待时间是以毫秒计算的,所以等待1秒就是sleep(1000),如果要让等待时间小于一秒,那么就让传入的参数小于1000就行了.

比如,等待0.1秒:

sleep(100)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/6161933.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-16
下一篇2023-03-16

发表评论

登录后才能评论

评论列表(0条)

    保存