真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言中計(jì)時(shí)到微妙的函數(shù),c語言中計(jì)時(shí)到微妙的函數(shù)是什么

C語言里有沒有精確到毫秒的時(shí)間函數(shù)

用clock就到毫秒了. 它是直接返回毫秒.

創(chuàng)新互聯(lián)建站致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、成都微信小程序、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。

#include stdio.h

#include stdlib.h

#include time.h

int main()

{

clock_t start, finish;

double elapsed_time;

start=clock();

finish=clock();

elapsed_time = finish-start;

}

求一個(gè)C語言的微秒級延時(shí)函數(shù)

c語言,微秒級延時(shí)

void?Delay_us?(unsigned?char?time_us)

{

unsigned?long?int??TM_LODAE;

TR2???=?0;??????????????????????????//?Stop?timer

TF2H??=?0;??????????????????????????//?Clear?timer?overflow?flag

TM_LODAE?=?65535-(UINT)(SYSCLK/1000000)?*?(UINT)(time_us);

//?TMR2??=?-(?(UINT)(SYSCLK/1000000)?*?(UINT)(time_us)?);

TMR2H?=??TM_LODAE8;

TMR2L =??TM_LODAE0x00FF;

TR2???=?1;??????????????????????????//?Start?timer

while?(!TF2H);??????????????????????//?Wait?till?timer?overflow?occurs

TR2???=?0;??????????????????????????//?Stop?timer

}

程序分析:

前面一起住航分析一下該代碼,

unsigned?long?int??TM_LODAE;??聲明一個(gè)長整型數(shù)據(jù),

TR2???=?0;????定時(shí)器2停止計(jì)時(shí)

TF2H??=?0;??????清除定時(shí)器2中斷標(biāo)志

TM_LODAE?=?65535-(UINT)(SYSCLK/1000000)?*?(UINT)(time_us);????計(jì)算定時(shí)器初值。?SYSCLK是系統(tǒng)的晶振頻率,SYSCLK/1000000是系統(tǒng)?1uS?執(zhí)行的指令。?(UINT)(SYSCLK/1000000)?*?(UINT)(time_us)就是系統(tǒng)?time_us執(zhí)行的指令數(shù)。?65535-(UINT)(SYSCLK/1000000)?*?(UINT)(time_us)定時(shí)器需要?TM_LODAE指令周期才會溢出。

該單片機(jī)的一個(gè)指令周期就是一個(gè)時(shí)鐘周期.TMR2H?=??TM_LODAE8;??TMR2L =??TM_LODAE0x00FF;置定時(shí)器寄存器的初值、

TR2???=?1;???啟動單片機(jī)計(jì)時(shí)? while?(!TF2H); ?等待定時(shí)器2寄存器溢出。TR2???=?0;停止計(jì)時(shí),在這段代碼注釋中已經(jīng)說明了應(yīng)該有50nS的誤差,這個(gè)是函數(shù)調(diào)用產(chǎn)生的。

c語言如何計(jì)時(shí)

C語言中提供了許多庫函數(shù)來實(shí)現(xiàn)計(jì)時(shí)功能

下面介紹一些常用的計(jì)時(shí)函數(shù)

1. time()

頭文件:time.h

函數(shù)原型:time_t time(time_t * timer)

功能:返回以格林尼治時(shí)間(GMT)為標(biāo)準(zhǔn),從1970年1月1日00:00:00到現(xiàn)在的時(shí)此刻所經(jīng)過的秒數(shù)

用time()函數(shù)結(jié)合其他函數(shù)(如:localtime、gmtime、asctime、ctime)可以獲得當(dāng)前系統(tǒng)時(shí)間或是標(biāo)準(zhǔn)時(shí)間。

用difftime函數(shù)可以計(jì)算兩個(gè)time_t類型的時(shí)間的差值,可以用于計(jì)時(shí)。用difftime(t2,t1)要比t2-t1更準(zhǔn)確,因?yàn)镃標(biāo)準(zhǔn)中并沒有規(guī)定time_t的單位一定是秒,而difftime會根據(jù)機(jī)器進(jìn)行轉(zhuǎn)換,更可靠。

說明:C標(biāo)準(zhǔn)庫中的函數(shù),可移植性最好,性能也很穩(wěn)定,但精度太低,只能精確到秒,對于一般的事件計(jì)時(shí)還算夠用,而對運(yùn)算時(shí)間的計(jì)時(shí)就明顯不夠用了。

2. clock()

頭文件:time.h

函數(shù)原型:clock_t clock(void);

功能:該函數(shù)返回值是硬件滴答數(shù),要換算成秒,需要除以CLK_TCK或者 CLK_TCKCLOCKS_PER_SEC。比如,在VC++6.0下,這兩個(gè)量的值都是1000。

說明:可以精確到毫秒,適合一般場合的使用。

3. timeGetTime()

頭文件:Mmsystem.h??引用庫: Winmm.lib

函數(shù)原型:DWORD timeGetTime(VOID);

功能:返回系統(tǒng)時(shí)間,以毫秒為單位。系統(tǒng)時(shí)間是從系統(tǒng)啟動到調(diào)用函數(shù)時(shí)所經(jīng)過的毫秒數(shù)。注意,這個(gè)值是32位的,會在0到2^32之間循環(huán),約49.71天。

說明:該函數(shù)的時(shí)間精度是五毫秒或更大一些,這取決于機(jī)器的性能??捎胻imeBeginPeriod和timeEndPeriod函數(shù)提高timeGetTime函數(shù)的精度。如果使用了,連續(xù)調(diào)用timeGetTime函數(shù),一系列返回值的差異由timeBeginPeriod和timeEndPeriod決定。

4. GetTickCount()

頭文件:windows.h

函數(shù)原型:DWORD WINAPI GetTickCount(void);

功能:返回自設(shè)備啟動后的毫秒數(shù)(不含系統(tǒng)暫停時(shí)間)。

說明:精確到毫秒。對于一般的實(shí)時(shí)控制,使用GetTickCount()函數(shù)就可以滿足精度要求。

5. QueryPerformanceCounter()、QueryPerformanceFrequency()

頭文件:windows.h

函數(shù)原型:BOOLQueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount);

BOOLQueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

功能:前者獲得的是CPU從開機(jī)以來執(zhí)行的時(shí)鐘周期數(shù)。后者用于獲得你的機(jī)器一秒鐘執(zhí)行多少次,就是你的時(shí)鐘周期。

補(bǔ)充:LARGE_INTEGER既可以是一個(gè)8字節(jié)長的整型數(shù),也可以是兩個(gè)4字節(jié)長的整型數(shù)的聯(lián)合結(jié)構(gòu), 其具體用法根據(jù)編譯器是否支持64位而定:

在進(jìn)行定時(shí)之前,先調(diào)用QueryPerformanceFrequency()函數(shù)獲得機(jī)器內(nèi)部定時(shí)器的時(shí)鐘頻率,然后在需要嚴(yán)格定時(shí)的事件發(fā)生之前和發(fā)生之后分別調(diào)用QueryPerformanceCounter()函數(shù),利用兩次獲得的計(jì)數(shù)之差及時(shí)鐘頻率,計(jì)算出事件經(jīng)歷的精確時(shí)間。

說明:這種方法的定時(shí)誤差不超過1微秒,精度與CPU等機(jī)器配置有關(guān),一般認(rèn)為精度為透微秒級。在Windows平臺下進(jìn)行高精度計(jì)時(shí)的時(shí)候可以考慮這種方法。

6. gettimeofday()

Linux C函數(shù)。

頭文件:sys/time.h

函數(shù)原型:int gettimeofday(struct timeval *tv,struct timezone *tz);

說明:其參數(shù)tv是保存獲取時(shí)間結(jié)果的結(jié)構(gòu)體,參數(shù)tz用于保存時(shí)區(qū)結(jié)果(若不使用則傳入NULL即可)。

timeval的定義為:

struct?timeval?{ ?

long?tv_sec;?//?秒數(shù)

long?tv_usec;?//微秒數(shù)

}

可見該函數(shù)可用于在linux中獲得微秒精度的時(shí)間。

說明:使用這種方式計(jì)時(shí),精度可達(dá)微秒。經(jīng)驗(yàn)證,在arm+linux的環(huán)境下此函數(shù)仍可使用。

單片機(jī)C語言中怎么實(shí)現(xiàn)微秒級延時(shí)?

可以用_nop_( )函數(shù)來實(shí)現(xiàn)微秒級的延時(shí)。

_nop_();????????????//?直接當(dāng)成一條語句使用,產(chǎn)生一條NOP指令

NOP指令為單周期指令,可由晶振頻率算出延時(shí)時(shí)間,對于12M晶振,延時(shí)1uS。

注:使用該函數(shù)時(shí),需要將頭文件#includeintrins.h包含進(jìn)源文件中。

C語言中有沒有用于計(jì)時(shí)的函數(shù)?怎么用?

clock()函數(shù):

clock()是c/c++中的計(jì)時(shí)函數(shù),而與其相關(guān)的數(shù)據(jù)類型是clock_t。在msdn中,查得對clock函數(shù)定義如下:

clock_t

clock(void)

;

這個(gè)函數(shù)返回從“開啟這個(gè)程序進(jìn)程”到“程序中調(diào)用clock()函數(shù)”時(shí)之間的cpu時(shí)鐘計(jì)時(shí)單元(clock

tick)數(shù),在msdn中稱之為掛鐘時(shí)間(wal-clock);若掛鐘時(shí)間不可取,則返回-1。其中clock_t是用來保存時(shí)間的數(shù)據(jù)類型,在time.h文件中,我們可以找到對它的定義:

#ifndef

_clock_t_defined

typedef

long

clock_t;

#define

_clock_t_defined

#endif

很明顯,clock_t是一個(gè)長整形數(shù)。在time.h文件中,還定義了一個(gè)常量clocks_per_sec,它用來表示一秒鐘會有多少個(gè)時(shí)鐘計(jì)時(shí)單元,其定義如下:

#define

clocks_per_sec

((clock_t)1000)

可以看到每過千分之一秒(1毫秒),調(diào)用clock()函數(shù)返回的值就加1。下面舉個(gè)例子,你可以使用公式clock()/clocks_per_sec來計(jì)算一個(gè)進(jìn)程自身的運(yùn)行時(shí)間:

void

elapsed_time()

{

printf("elapsed

time:%u

secs.\n",clock()/clocks_per_sec);

}

當(dāng)然,你也可以用clock函數(shù)來計(jì)算你的機(jī)器運(yùn)行一個(gè)循環(huán)或者處理其它事件到底花了多少時(shí)間:

#include

#include

#include

int

main(void)

{

long

i

=

10000000l;

clock_t

start,

finish;

double

duration;

/*

測量一個(gè)事件持續(xù)的時(shí)間*/

printf(

"time

to

do

%ld

empty

loops

is

",

i)

;

start

=

clock();

while(

i--

);

finish

=

clock();

duration

=

(double)(finish

-

start)

/

clocks_per_sec;

printf(

"%f

seconds\n",

duration

);

system("pause");

}

在筆者的機(jī)器上,運(yùn)行結(jié)果如下:

time

to

do

10000000

empty

loops

is

0.03000

seconds

上面我們看到時(shí)鐘計(jì)時(shí)單元的長度為1毫秒,那么計(jì)時(shí)的精度也為1毫秒,那么我們可不可以通過改變clocks_per_sec的定義,通過把它定義的大一些,從而使計(jì)時(shí)精度更高呢?通過嘗試,你會發(fā)現(xiàn)這樣是不行的。在標(biāo)準(zhǔn)c/c++中,最小的計(jì)時(shí)單位是一毫秒。

time_t

time(

time_t

*timer

);

返回值是1970年到現(xiàn)在的秒數(shù)

用long型接就可以了

參數(shù)也是同樣意義

long

time_s

=

0;

time_s

=

time(

null

);

//

time_s就是1970年到現(xiàn)在的秒數(shù)

或者

long

*

time_s

=

null;

time(time_s);

//

*time_s就是1970年到現(xiàn)在的秒數(shù)

要計(jì)算前后一段時(shí)間的話之前取一次time,之后取一次相減就知道用了多少秒了


當(dāng)前名稱:c語言中計(jì)時(shí)到微妙的函數(shù),c語言中計(jì)時(shí)到微妙的函數(shù)是什么
文章分享:http://weahome.cn/article/hcodde.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部