国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

linux下實(shí)現(xiàn)定時(shí)器的三種簡單方式

這篇具有很好參考價(jià)值的文章主要介紹了linux下實(shí)現(xiàn)定時(shí)器的三種簡單方式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一. sleep()和usleep()

1.sleep()

2.usleep()

3.毫秒級延時(shí)

二. signal與alarm()

三.?select

四.?一些總結(jié)


一. sleep()和usleep()

????????優(yōu)點(diǎn)是簡單便捷,直接調(diào)用即可,但是缺點(diǎn)也很明顯,精度不夠,特別是在系統(tǒng)負(fù)載比較大時(shí),會(huì)發(fā)生超時(shí)現(xiàn)象。

1.sleep()

#include <unistd.h>

unsigned int sleep(unsigned int? ?seconds);

功能:執(zhí)行掛起指定的秒數(shù)

????????sleep()只能精確到秒級上。sleep()非系統(tǒng)調(diào)用,sleep()是在庫函數(shù)中實(shí)現(xiàn)的,它是通過alarm()來設(shè)定報(bào)警時(shí)間,使用sigsuspend()將進(jìn)程掛起在信號SIGALARM上。sleep()會(huì)令目前的進(jìn)程暫停,直到達(dá)到參數(shù)seconds 所指定的時(shí)間,或是被信號所中斷。

2.usleep()

#include <unistd.h>

void usleep(int? ? ?micro_seconds);

功能:把進(jìn)程掛起一段時(shí)間,單位是微秒(百萬分之一)

????????除了時(shí)間單位為微秒以外,在使用上與sleep()差不多。但實(shí)現(xiàn)是不同的,sleep是用alarm實(shí)現(xiàn)的,所以時(shí)間單位為s ,而usleep的時(shí)間單位為us,肯定不是由alarm實(shí)現(xiàn)的,所以說它們的實(shí)現(xiàn)不同,但都是linux用的,而window下不能用,因?yàn)槎际莝leep和usleep都是在unistd.h下定義的。

????????一般情況下,延遲時(shí)間數(shù)量級是秒的時(shí)候,盡可能使用sleep()函數(shù)。如果延遲時(shí)間為幾十毫秒(1ms = 1000us),或者更小,盡可能使用usleep()函數(shù)。這樣才能最佳的利用CPU時(shí)間。

3.毫秒級延時(shí)

? ? ? ? 因?yàn)閘inux下沒有現(xiàn)成的毫秒級延時(shí),這里我們可以自己簡單寫一個(gè):

#include <unistd.h>

void msleep(unsigned long     ms)
{
    struct timeval        tv;
    tv.tv_sec = ms/1000;
    tv.tv_usec = (ms%1000)*1000;

    select(0, NULL, NULL, NULL, &tv);
}

二. signal與alarm()

????????使用signal函數(shù)設(shè)定SIGALRM的處理函數(shù),然后使用alarm()定時(shí)發(fā)送SIGALRM來實(shí)現(xiàn)。??

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int alarm_flag=1;

void timer(int sig)
{
    if(SIGALRM == sig)
    {
        alarm_flag = 1;
    }
    return;
}

int main()
{
    signal(SIGALRM, timer);
    
    while( alrm_flag )
    {
        alarm_flag = 0;

        printf("hello\n");
        alarm(5);
     }

    return 0;
}

#include <unistd.h>

unsigned int alarm(unsigned int? ? ? ? ?seconds);? ? ? ??

功能:設(shè)置信號傳送鬧鐘

????????alarm()也稱為鬧鐘函數(shù),alarm()函數(shù)的主要功能是設(shè)置信號傳送鬧鐘,即?來設(shè)置信號SIGALRM 在經(jīng)過參數(shù)seconds 秒數(shù)后發(fā)送給?前的進(jìn)程。如果未設(shè)置信號SIGALARM 的處理函數(shù),那么alarm()默認(rèn)處理終?進(jìn)程。如果參數(shù)seconds為0,則之前設(shè)置的鬧鐘會(huì)被取消,并將剩下的時(shí)間返回。

????????PS:一個(gè)進(jìn)程只能有一個(gè)鬧鐘時(shí)間,如果在調(diào)用alarm之前已設(shè)置過鬧鐘時(shí)間,則任何以前的鬧鐘時(shí)間都被新值所代替。

三.?select

#include <sys/select.h>

#include <sys/time.h>

#include <sys/types.h>

#include <unistd.h>

int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval * timeout);

功能:用來等待文件描述詞狀態(tài)的改變。參數(shù)n代表最大的文件描述詞加1,參數(shù)readfds、writefds 和exceptfds稱為描述詞組,是用來回傳該描述詞的讀,寫或例外的狀況。

?????????這里就不詳細(xì)介紹select函數(shù)的參數(shù)及功能了,大家感興趣可以自行查閱。這里要實(shí)現(xiàn)定時(shí)器的話,把第一個(gè)參數(shù)設(shè)置為0,中間三個(gè)文件描述符集都設(shè)置為NULL,第五個(gè)參數(shù)為時(shí)間結(jié)構(gòu)體,我們主要就是使用參數(shù),把它設(shè)置為我們想要定時(shí)的頻率就好。

????????timeout為結(jié)構(gòu)timeval,用來設(shè)置select()的等待時(shí)間,其結(jié)構(gòu)定義如下:

struct timeval

{

????????time_t? ? ? ? tv_sec;

? ? ? ? time_t? ? ? ? tv_usec;
};

#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

void timer_s(unsigned long    s, unsigned long     us)
{
    struct timeval        tv;

    tv.tv_sec = s;
    tv.tv_usec = us;

    select(0, NULL, NULL, NULL, &tv);
}

int main()
{
    while(1)
    {
        printf("hello\n");
        timer_s(3, 0);
    }

    return 0;
}

四.?一些總結(jié)

linux 定時(shí)器,linux,筆記,linux,學(xué)習(xí)

????????大家根據(jù)自己需求選擇,這是在網(wǎng)上扒下來的一張圖,原文鏈接如下:

Linux中的sleep、usleep、nanosleep、poll和select不同的sleep方式https://mp.weixin.qq.com/s?src=11×tamp=1680196399&ver=4438&signature=LzDVJT7uLU7DuxA6qxK8Sm4FqjJw8G347mhB56nkDIb5R2XQsifqz-NFi1nmisdVYxrrRNgLVKIJqjN4koJ59oTtTBWunbaWVMV7u6dNydmBRf-DA9aR6yVNKkbJF*oI&new=1文章來源地址http://www.zghlxwxcb.cn/news/detail-590625.html

到了這里,關(guān)于linux下實(shí)現(xiàn)定時(shí)器的三種簡單方式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 無緣蜂鳴器——stm32定時(shí)器PWM實(shí)現(xiàn)控制發(fā)出“哆瑞咪發(fā)…“七個(gè)音及簡單音樂

    無緣蜂鳴器——stm32定時(shí)器PWM實(shí)現(xiàn)控制發(fā)出“哆瑞咪發(fā)…“七個(gè)音及簡單音樂

    一、有緣蜂鳴器和無緣蜂鳴器 所謂的 有源蜂鳴器 是指蜂鳴器內(nèi)部內(nèi)置振蕩電路,一通電就能響。但發(fā)生頻率固定,音色單一; 無源蜂鳴 器內(nèi)部不含振蕩源,內(nèi)部結(jié)構(gòu)相當(dāng)于電磁場揚(yáng)聲器,可以通過給他輸出一定頻率的信號才能發(fā)聲。人耳能聽到的頻率范圍在20Hz–20kHz之間

    2024年02月02日
    瀏覽(70)
  • 基于HAL庫的STM32單定時(shí)器多路輸入捕獲測量PWM的頻率和占空比實(shí)現(xiàn)(狀態(tài)機(jī)方式實(shí)現(xiàn))

    基于HAL庫的STM32單定時(shí)器多路輸入捕獲測量PWM的頻率和占空比實(shí)現(xiàn)(狀態(tài)機(jī)方式實(shí)現(xiàn))

    目錄 ?寫在前面 先回顧下定時(shí)器的單路捕獲PWM 多路捕獲PWM的頻率和占空比(狀態(tài)機(jī)實(shí)現(xiàn)) 我的思路: 狀態(tài)圖 配置 給出示例代碼 測試效果 ????????先有了這篇文章實(shí)現(xiàn)了單定時(shí)器的多通道測量頻率,以外部時(shí)鐘的方式可測量任意頻率的方波),奈何不能多路測試PWM波的頻率,

    2024年02月12日
    瀏覽(18)
  • 【51單片機(jī)】:定時(shí)器的詳解(包括對單片機(jī)定時(shí)解釋、各類定時(shí)方式,以及中斷方式)

    【51單片機(jī)】:定時(shí)器的詳解(包括對單片機(jī)定時(shí)解釋、各類定時(shí)方式,以及中斷方式)

    ? ? ? ? ? 51定時(shí)/計(jì)數(shù)器的詳解。 ? ? ? ? ? ? ? ? ? 碼字不易,如有幫助請收藏,點(diǎn)贊哦。 ? ? ? ? 前提:首先我們知道51單片機(jī)內(nèi)部有21~26個(gè)特殊功能寄存器: P.x口寄存器:P0、P1、P2、P3 數(shù)據(jù)指針寄存器:DP0H、DP0L、DP1H、DP1L 定時(shí)器: TH1、TL1、TH0、TL0、TMOD、TCON 串口:

    2024年02月07日
    瀏覽(51)
  • 通俗理解TIM定時(shí)器并簡單使用

    通俗理解TIM定時(shí)器并簡單使用

    前言:本文章部分代碼參考自野火的例程 本人使用的是野火家的指南者開發(fā)板,芯片型號是STM32f103VET6 有紕漏請指出,轉(zhuǎn)載請說明。 學(xué)習(xí)交流請發(fā)郵件 1280253714@qq.com 源代碼在這里 B站這位UP主講51單片機(jī)定時(shí)器工作原理 講得很好 stm32有3種定時(shí)器,分別是基本定時(shí)器、通用定時(shí)

    2024年02月10日
    瀏覽(20)
  • RabbitMQ 簡單實(shí)現(xiàn)創(chuàng)建隊(duì)列的三種方式

    //1. 手動(dòng)創(chuàng)建,需在RabbitMQ中手動(dòng)創(chuàng)建myQueue1 隊(duì)列,否則報(bào)錯(cuò) @RabbitListener(queues = “myQueue1”) public void process1(String message){ log.info(“MqReceiver1: {}”, message); } //2. 自動(dòng)創(chuàng)建隊(duì)列 @RabbitListener(queuesToDeclare = @Queue(“myQueue2”)) public void process2(String message){ log.info(“MqReceiver2: {}”, messa

    2024年02月15日
    瀏覽(21)
  • 【STM32H7 開發(fā)筆記】| 02 - 通過定時(shí)器級聯(lián)方式同步啟動(dòng)多個(gè)定時(shí)器并輸出 PWM 波形

    【STM32H7 開發(fā)筆記】| 02 - 通過定時(shí)器級聯(lián)方式同步啟動(dòng)多個(gè)定時(shí)器并輸出 PWM 波形

    (STM32H723xE/G) 所有定時(shí)器包括 兩個(gè)高級控制定時(shí)器、十二個(gè)通用定時(shí)器、兩個(gè)基本定時(shí)器、五個(gè)低功耗定時(shí)器、兩個(gè)看門狗定時(shí)器和一個(gè)SysTick定時(shí)器 。所有計(jì)時(shí)器計(jì)數(shù)器都可以在Debug模式下凍結(jié)。 本次實(shí)驗(yàn)主頻配置的是500MHz 高級控制定時(shí)器(TIM1,TIM8)可以看作是在6通道

    2024年02月14日
    瀏覽(36)
  • stm32定時(shí)器方式精確輸出指定脈沖個(gè)數(shù)

    stm32定時(shí)器方式精確輸出指定脈沖個(gè)數(shù)

    本例使用芯片為 STM32f407zg 使用標(biāo)準(zhǔn)庫編程 輸出指定脈沖個(gè)數(shù)的PWM方法主要有兩種:計(jì)數(shù)器中斷方式和定時(shí)器同步方式。 項(xiàng)目輸出可控雙脈沖pwm波形,可根據(jù)需要控制輸出脈沖個(gè)數(shù),查閱網(wǎng)上資料大部分為HAL庫配置,自己實(shí)際第一次編程有些一頭霧水,后查閱官方幫助手冊和

    2024年02月16日
    瀏覽(23)
  • STM32 定時(shí)器時(shí)間設(shè)定及計(jì)算最簡單理解

    玩了一段時(shí)間STM32,沒有經(jīng)過系統(tǒng)學(xué)習(xí),對這個(gè)定時(shí)器定時(shí)時(shí)間計(jì)算理解很懵懂! 如下面定時(shí)器初始化代碼 TIM_Period=自動(dòng)裝載值 TIM_Prescaler=預(yù)分頻值 定時(shí)時(shí)間計(jì)算: 定時(shí)時(shí)間=(TIM_Period)X(TIM_Prescaler)/Timer clocks(定時(shí)器時(shí)鐘頻率) 假如:TIM_Period=5000,TIM_Prescaler=84,Timer clocks=84Mhz

    2024年02月08日
    瀏覽(18)
  • Linux定時(shí)器

    Linux定時(shí)器是一種 軟件機(jī)制 ,用于在指定的時(shí)間間隔或特定時(shí)間點(diǎn)執(zhí)行特定的任務(wù)。它是 基于內(nèi)核的機(jī)制 ,可以用于各種應(yīng)用場景,如定時(shí)任務(wù)調(diào)度、延時(shí)處理、周期性事件觸發(fā)等。 運(yùn)作機(jī)制(工作原理):Linux定時(shí)器的工作原理主要分為兩個(gè)部分:定時(shí)器的創(chuàng)建和定時(shí)器

    2024年02月03日
    瀏覽(20)
  • Linux 內(nèi)核定時(shí)器

    Linux 內(nèi)核定時(shí)器

    一、相關(guān)知識點(diǎn) (一)知識點(diǎn) 1、內(nèi)核定時(shí)器分類 ? ? 1)標(biāo)準(zhǔn)定時(shí)器或系統(tǒng)定時(shí)器 ? ? 2)高精度定時(shí)器(HRT) ?? ?? ? 頭文件:#include linux/hrtimer.h 2、檢查系統(tǒng)是否可用HRT ? ? 1)查看內(nèi)核配置文件 ?? ??? ? ? ? 2)查看機(jī)器 ?? ??? ?cat proc/timer_list??| grep \\\"resolution\\\"?

    2024年02月11日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包