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

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

c語(yǔ)言測(cè)cpu周期的函數(shù) cpu的指令周期和時(shí)鐘周期

怎么測(cè)量C程序運(yùn)行的CPU周期數(shù),用C語(yǔ)言實(shí)現(xiàn)! - C / C++ -

補(bǔ)充下,我用的環(huán)境是VC++2010,不知道編譯器能不能搞定,如果可以了請(qǐng)大俠指導(dǎo)下!

你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)、品牌網(wǎng)站制作、網(wǎng)頁(yè)制作、做網(wǎng)站、建網(wǎng)站。成都創(chuàng)新互聯(lián)公司擁有實(shí)力堅(jiān)強(qiáng)的技術(shù)研發(fā)團(tuán)隊(duì)及素養(yǎng)的視覺(jué)設(shè)計(jì)專才。

如何測(cè)試cpu時(shí)間片長(zhǎng)度 c語(yǔ)言

使用以下WINAPI 函數(shù)

QueryPerformanceFrequency // 獲取 CPU 頻率。

QueryPerformanceCounter //獲取系統(tǒng)自開(kāi)機(jī)到現(xiàn)在的 CPU 時(shí)鐘周期數(shù)。

可以將他們包裝成類,詳情:

C語(yǔ)言 關(guān)于sound();函數(shù)和delay();

函數(shù):

voiddelay(uinti)

{

while(i)i--;

}

這樣的延遲設(shè)計(jì)很不好,因?yàn)槭苡绊懙囊蛩靥唷?/p>

首先就是機(jī)器的CPU頻率,快的CPU執(zhí)行i--這句的機(jī)器時(shí)間短,慢的機(jī)器就很慢。

其次是當(dāng)前機(jī)器的負(fù)荷情況,負(fù)荷較重時(shí),系統(tǒng)給當(dāng)前進(jìn)程分配的CPU時(shí)間少,執(zhí)行這些語(yǔ)句的機(jī)會(huì)就少,延遲就增加了。

影響因素還有很多在此不再列舉。

做延遲程序主要有以下幾種方法:

1.定時(shí)器法

用CWnd::SetTimer()函數(shù)設(shè)置定時(shí)器,當(dāng)定時(shí)時(shí)間到時(shí)發(fā)送WM_TIMER消息觸發(fā)CWnd::OnTimer()函數(shù),重載它把自己的代碼放進(jìn)去。

SetTimer()參數(shù)為毫秒,此方法定時(shí)不高,受系統(tǒng)負(fù)荷影響。

2.休眠法

調(diào)用系統(tǒng)API函數(shù)Sleep(2000);參數(shù)單位是毫秒,2000代表2秒。

此方法主要收到當(dāng)前系統(tǒng)負(fù)荷的影響,定時(shí)不太準(zhǔn)確

3.時(shí)刻比較法

定義兩個(gè)CTime變量,一個(gè)用于記錄起始時(shí)刻,另一個(gè)放在循環(huán)體中不斷刷新當(dāng)前時(shí)刻,并減去起始時(shí)刻,自己計(jì)算是否到時(shí)間了。

此方法因CTime變量只能獲取秒級(jí)的時(shí)刻,且收到系統(tǒng)負(fù)荷影響,精度也較低。

4.CPU滴答查詢法

利用兩個(gè)API函數(shù)QueryPerformanceFrequency()和QueryPerformanceCounter()分別獲取CPU的頻率和CPU滴答數(shù),依時(shí)刻比較法自己計(jì)算時(shí)刻差值。

因?yàn)镃PU滴答數(shù)是等于CPU的機(jī)器周期的,所以是Windows系統(tǒng)里最最精確的計(jì)時(shí)方法了。現(xiàn)在的CPU主頻都是GHz級(jí)的,因此理論上計(jì)時(shí)精度可以到納秒。

只要系統(tǒng)負(fù)荷不太重,此法可用于極其精確的延時(shí)程序。

因?yàn)閃indows并不是實(shí)時(shí)操作系統(tǒng),因此對(duì)于太過(guò)精確的計(jì)時(shí),還是無(wú)能為力的。

請(qǐng)問(wèn)C語(yǔ)言中clock()函數(shù)該怎么用?

clock()是C/C++中的計(jì)時(shí)函數(shù),而與其相關(guān)的數(shù)據(jù)類型是clock_t。

它的具體功能是返回處理器調(diào)用某個(gè)進(jìn)程或函數(shù)所花費(fèi)的時(shí)間。函數(shù)返回從“開(kāi)啟這個(gè)程序進(jìn)程”到“程序中調(diào)用clock()函數(shù)”時(shí)之間的CPU時(shí)鐘計(jì)時(shí)單元(clock tick)數(shù),其中clock_t是用來(lái)保存時(shí)間的數(shù)據(jù)類型。

在time.h文件中,我們可以找到對(duì)它的定義:

#ifndef _CLOCK_T_DEFINED

typedef long clock_t;

#define _CLOCK_T_DEFINED

#endif

clock_t其實(shí)就是long,即長(zhǎng)整形。該函數(shù)返回值是硬件滴答數(shù),要換算成秒或者毫秒,需要除以CLK_TCK或者 CLK_TCK CLOCKS_PER_SEC。比如,在VC++6.0下,這兩個(gè)量的值都是1000,這表示硬件滴答1000下是1秒,因此要計(jì)算一個(gè)進(jìn)程的時(shí)間,用clock()除以1000即可。

clock的返回值一直是0的原因:

1、編譯器優(yōu)化,for循環(huán)實(shí)際根本沒(méi)執(zhí)行,直接跳過(guò)去了,所以時(shí)間為0。

2、clock計(jì)算的是程序占用cpu的時(shí)間,如果你的程序執(zhí)行的動(dòng)作很少,那么clock算出的時(shí)間也很少。

3、建議使用time gettimeofday函數(shù)來(lái)計(jì)時(shí)。

擴(kuò)展資料:

C語(yǔ)言中clock()函數(shù)的程序例1:(TC下運(yùn)行通過(guò))

#include?stdio.h

#include?time.h

int?main(void)

{

clock_t?start,?end;

start?=?clock();

delay(2000);

end?=?clock();

printf("The?time?was:?%f\n",?(double)(end?-?start)?/?CLK_TCK);

return?0;

}

說(shuō)明:CLK_TCK?定義在TC中的time.h中:#define?CLK_TCK18.2。

在VC6.0中也有關(guān)于CLK_TCK的宏定義,不過(guò)其值不再是18.2,而是1000。

實(shí)際上在VC6.0中CLK_TCK已完全等同CLOCKS_PER_SEC。

參考資料來(lái)源:百度百科-clock()


本文標(biāo)題:c語(yǔ)言測(cè)cpu周期的函數(shù) cpu的指令周期和時(shí)鐘周期
標(biāo)題URL:http://weahome.cn/article/doogdod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部