調(diào)用定時(shí)器子函數(shù)c語(yǔ)言 c++定時(shí)器函數(shù)

c語(yǔ)言如何實(shí)現(xiàn)定時(shí)調(diào)用函數(shù)?

#include?stdio.h

邕寧ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

void?delay(unsigned?long?n)?{//延時(shí)時(shí)間與n有關(guān)系,業(yè)余你的電腦的運(yùn)行速度有關(guān),至于延時(shí)是否有5秒,請(qǐng)自行調(diào)整

unsigned?long?i,j,k,m?=?n;

for(i?=?0;?i??n;?++i)

for(j?=?0;j??n;?++j)

for(k?=?0;j??n;?++i)

while(m--);

}

void?fun()?{}

int?main()?{

unsigned?n?=?50000;

while(1)?{

fun();

delay(n);//延時(shí)

}

return?0;

}

怎么用C語(yǔ)言編定時(shí)器?

Windows提供了定時(shí)器,幫助我們編寫定期發(fā)送消息的程序。定時(shí)器一般通過(guò)一下兩中方式通知應(yīng)用程序間隔時(shí)間已到。

⑴ 給指定窗口發(fā)送WM_TIMER消息,也就是下面的給出在窗口類中使用的方法。

⑵ 調(diào)用一個(gè)應(yīng)用程序定義的回調(diào)函數(shù),也就是在非窗口類中使用方法。

4.1 在窗口類中使用定時(shí)器

在窗口類中使用定時(shí)器比較簡(jiǎn)單。假如我們想讓這個(gè)窗口上放置一個(gè)電子鐘,這樣我們必須每1秒或者0.5秒鐘去更新顯示顯見(jiàn)。按照下面的步驟,就可以完成這個(gè)電子鐘程序,并且知道如何在窗口類中使用定時(shí)器:

首先做在我們新建項(xiàng)目的主窗口上添加一個(gè)Label控件,用來(lái)顯示時(shí)間。接著

⑴ 用函數(shù)SetTimer設(shè)置一個(gè)定時(shí)器,函數(shù)格式如下: UINT SetTimer( UINT nIDEvent,

UINT nElapse,

void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD));

這個(gè)函數(shù)是CWnd類的一個(gè)成員函數(shù),其參數(shù)意義如下:

nIDEvent: 為設(shè)定的定時(shí)器指定的定時(shí)器標(biāo)志值,設(shè)置多個(gè)定時(shí)器的時(shí)候,每個(gè)定時(shí)器的值都不同,消息處理函數(shù)就是通過(guò)這個(gè)參數(shù)來(lái)判斷是哪個(gè)定時(shí)器的。這里我們?cè)O(shè)定為1。

nElapse: 指定發(fā)送消息的時(shí)間間隔,單位是毫秒。這里我們?cè)O(shè)定為1000,也就是一秒。

lpfnTimer: 指定定時(shí)器消息由哪個(gè)回調(diào)函數(shù)來(lái)執(zhí)行,如果為空,WM_TIMER將加入到應(yīng)用程序的消息隊(duì)列中,并由CWnd類來(lái)處理。這里我們?cè)O(shè)定為NULL。

最后代碼如下:SetTimer(1,1000,NULL);

⑵ 通過(guò)Class Wizard給主窗口類添加一個(gè)WM_TIMER消息的映射函數(shù),默認(rèn)為OnTimer(UINT nIDEvent)。

⑶ 然后我們就可以在OnTimer(UINT nIDEvent)的函數(shù)實(shí)現(xiàn)中添加我們的代碼了。參數(shù)nIDEvent就是我們先前設(shè)定定時(shí)器時(shí)指定的標(biāo)志值,在這里我們就可以通過(guò)它來(lái)區(qū)別不同的定時(shí)器,而作出不同的處理。添加的代碼如下:switch(nIDEvent)

{

case 1:

CTime m_SysTime = CTime::GetCurrentTime();

SetDlgItemText(IDC_STATIC_TIME,m_SysTime.Format("%Y年%m月%d日 %H:%M:%S"));

break;

}

代碼中的IDC_STATIC_TIME就是我們先前添加的Label控件的ID。

至此,我們的電子鐘的程序就完成了。

4.2 在非窗口類中使用定時(shí)器

在非窗口類中使用定時(shí)器就要用到前面我們介紹到的所有知識(shí)了。因?yàn)槭菬o(wú)窗口類,所以我們不能使用在窗口類中用消息映射的方法來(lái)設(shè)置定時(shí)器,這時(shí)候就必須要用到回調(diào)函數(shù)。又因?yàn)榛卣{(diào)函數(shù)是具有一定格式的,它的參數(shù)不能由我們自己來(lái)決定,所以我們沒(méi)辦法利用參數(shù)將this傳遞進(jìn)去??墒庆o態(tài)成員函數(shù)是可以訪問(wèn)靜態(tài)成員變量的,因此我們可以把this保存在一個(gè)靜態(tài)成員變量中,在靜態(tài)成員函數(shù)中就可以使用該指針,對(duì)于只有一個(gè)實(shí)例的指針,這種方法還是行的通的,由于在一個(gè)類中該靜態(tài)成員變量只有一個(gè)拷貝,對(duì)于有多個(gè)實(shí)例的類,我們就不能用區(qū)分了。解決的辦法就是把定時(shí)器標(biāo)志值作為關(guān)鍵字,類實(shí)例的指針作為項(xiàng),保存在一個(gè)靜態(tài)映射表中,因?yàn)槭菢?biāo)志值是唯一的,用它就可以快速檢索出映射表中對(duì)應(yīng)的該實(shí)例的指針,因?yàn)槭庆o態(tài)的,所以回調(diào)函數(shù)是可以訪問(wèn)他們的。

首先介紹一下用于設(shè)置定時(shí)的函數(shù):

UINT SetTimer(

HWND hWnd, // handle of window for timer messages

UINT nIDEvent, // timer identifier

UINT uElapse, // time-out value

TIMERPROC lpTimerFunc // address of timer procedure

);

其中的參數(shù)意義如下:

hWnd: 指定與定時(shí)器相關(guān)聯(lián)的窗口的句柄。這里我們?cè)O(shè)為NULL。

nIDEvent: 定時(shí)器標(biāo)志值,如果hWnd參數(shù)為NULL,它將會(huì)被跳過(guò),所以我們也設(shè)定為NULL。

uElapse: 指定發(fā)送消息的時(shí)間間隔,單位是毫秒。這里我們不指定,用參數(shù)傳入。

lpTimerFunc: 指定當(dāng)間隔時(shí)間到的時(shí)候被統(tǒng)治的函數(shù)的地址,也就是這里的回調(diào)函數(shù)。這個(gè)函數(shù)的格式必須為以下格式:

VOID CALLBACK TimerProc(

HWND hwnd, // handle of window for timer messages

UINT uMsg, // WM_TIMER message

UINT idEvent, // timer identifier

DWORD dwTime // current system time

);

其中的參數(shù)意義如下:

hwnd: 與定時(shí)器相關(guān)聯(lián)的窗口的句柄。

uMsg: WM_TIMER消息。

idEvent: 定時(shí)器標(biāo)志值。

deTime: 系統(tǒng)啟動(dòng)后所以經(jīng)過(guò)的時(shí)間,單位毫秒。

最后設(shè)定定時(shí)器的代碼為:m_nTimerID = SetTimer(NULL,NULL,nElapse,MyTimerProc);

先通過(guò)Class Wizard創(chuàng)建一個(gè)非窗口類,選擇Generic Class類類型,類名稱為CMyTimer,該類的作用是每隔一段時(shí)間提醒我們做某件事情,然后用這個(gè)類創(chuàng)建三個(gè)實(shí)例,每個(gè)實(shí)例以不同的時(shí)間間隔提醒我們做不同的事情。

MyTimer.h#include

class CMyTimer;

//用模板類中的映射表類定義一種數(shù)據(jù)類型

typedef CMap CTimerMap;

class CMyTimer

{

public:

//設(shè)置定時(shí)器,nElapse表示時(shí)間間隔,sz表示要提示的內(nèi)容

void SetMyTimer(UINT nElapse,CString sz);

//銷毀該實(shí)例的定時(shí)器

void KillMyTimer();

//保存該實(shí)例的定時(shí)器標(biāo)志值

UINT m_nTimerID;

//靜態(tài)數(shù)據(jù)成員要提示的內(nèi)容

CString szContent;

//聲明靜態(tài)數(shù)據(jù)成員,映射表類,用于保存所有的定時(shí)器信息

static CTimerMap m_sTimeMap;

//靜態(tài)成員函數(shù),用于處理定時(shí)器的消息

static void CALLBACK MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime);

CMyTimer();

virtual ~CMyTimer();

};

MyTimer.cpp#include "stdafx.h"

#include "MyTimer.h"

//必須要在外部定義一下靜態(tài)數(shù)據(jù)成員

CTimerMap CMyTimer::m_sTimeMap;

CMyTimer::CMyTimer()

{

m_nTimerID = 0;

}

CMyTimer::~CMyTimer()

{

}

void CALLBACK CMyTimer::MyTimerProc(HWND hwnd,UINT uMsg,UINT idEvent,DWORD dwTime)

{

CString sz;

sz.Format("%d號(hào)定時(shí)器:%s",

idEvent,

m_sTimeMap[idEvent]-szContent);

AfxMessageBox(sz);

}

void CMyTimer::SetMyTimer(UINT nElapse,CString sz)

{

szContent = sz;

m_nTimerID = SetTimer(NULL,NULL,nElapse,MyTimerProc);

m_sTimeMap[m_nTimerID] = this;

}

void CMyTimer::KillMyTimer()

{

KillTimer(NULL,m_nTimerID);

m_sTimeMap.RemoveKey(m_nTimerID);

}

這樣就完成了在非窗口類中使用定時(shí)器的方法。以上這些代碼都在Windwos 2000 Professional 和 Visual C++ 6.0中編譯通過(guò)。

單片機(jī)C語(yǔ)言定時(shí)器如何調(diào)用

單片機(jī)中通過(guò)中斷的方式來(lái)調(diào)用定時(shí)器。

具體的調(diào)用方式可以參考通過(guò)如下程序:

程序功能:利用定時(shí)器進(jìn)行定時(shí),實(shí)現(xiàn)每秒中l(wèi)ed閃爍一次

#includereg52.h

sbit?led?=?P0^0;

unsigned?int?num;

void?main(void)

{

TMOD?=?0x00;???//?工作方式0

TH0?=?(8192?-?5000)?/?32;??//?12M晶振下定時(shí)5ms

TL0?=?(8192?-?5000)?%?32;

EA?=?1; ???//?開(kāi)總中斷

ET0?=?1; ???//?開(kāi)定時(shí)器中斷

TR0?=?1; ???//?啟動(dòng)定時(shí)器

while(1)

{

? if(num?==?200) ??//?定時(shí)1秒鐘到

{

num?=?0; ??//?計(jì)數(shù)器清零

led?=?~led; ??//?led燈取反,實(shí)現(xiàn)1秒閃爍一次

}

}

}

void?timer()?interrupt?1??//?定時(shí)器1工作與方式0

{

TH0?=?(8192?-?5000)?/?32;??//?重裝初值

TL0?=?(8192?-?5000)?%?32;

num++; ?//?計(jì)數(shù)器加1

}

C語(yǔ)言 timer函數(shù) 和time函數(shù)

Timer()函數(shù)

語(yǔ)法:Timer ( interval {, windowname } )

參數(shù):指定兩次觸發(fā)Timer事件之間的時(shí)間間隔,有效值在0到65之間。如果該參數(shù)的值指定為0,那么關(guān)閉定時(shí)器,不再觸發(fā)指定窗口的Timer事件。windowname:窗口名,指定時(shí)間間隔到時(shí)要觸發(fā)哪個(gè)窗口的Timer事件。省略該參數(shù)時(shí),觸發(fā)當(dāng)前窗口的Timer事件返回值Integer。函數(shù)執(zhí)行成功時(shí)返回1,發(fā)生錯(cuò)誤時(shí)返回-1。如果任何參數(shù)的值為NULL,Timer()函數(shù)返回NULL。用法使用Timer()函數(shù)可以周期性地觸發(fā)指定窗口的Timer事件,這樣,每當(dāng)時(shí)間間隔過(guò)去時(shí),應(yīng)用程序都可以完成一些周期性的工作,比如繪制簡(jiǎn)單動(dòng)畫等。將Timer()的interval參數(shù)設(shè)置為非0值時(shí)啟動(dòng)定時(shí)器并開(kāi)始計(jì)時(shí);將該函數(shù)的interval參數(shù)設(shè)置為0時(shí)關(guān)閉定時(shí)器,終止計(jì)時(shí)任務(wù)。需要注意的是,在Microsoft Windows系統(tǒng)中,該函數(shù)能夠計(jì)時(shí)的最小時(shí)間間隔為0.055秒(約1/18秒),如果把interval參數(shù)的值設(shè)置小于0.055,那么該定時(shí)器將每隔0.055秒觸發(fā)一次窗口的Timer事件。Microsoft Windows 3.x最多只支持系統(tǒng)中同時(shí)啟動(dòng)16個(gè)定時(shí)器。

用法:

啟動(dòng)定時(shí)器。

啟動(dòng)定時(shí)器就需要使用CWnd類的成員函數(shù)SetTimer。CWnd::SetTimer的原型如下:

UINT_PTR SetTimer(

UINT_PTR nIDEvent,

UINT nElapse,

void (CALLBACK* lpfnTimer)(

HWND,

UINT,

UINT_PTR,

DWORD

)

);

參數(shù)nIDEvent指定一個(gè)非零的定時(shí)器ID;參數(shù)nElapse指定間隔時(shí)間,單位為毫秒;參數(shù)lpfnTimer指定一個(gè)回調(diào)函數(shù)的地址,如果該參數(shù)為NULL,則WM_TIMER消息被發(fā)送到應(yīng)用程序的消息隊(duì)列,并被CWnd對(duì)象處理。如果此函數(shù)成功則返回一個(gè)新的定時(shí)器的ID,我們可以使用此ID通過(guò)KillTimer成員函數(shù)來(lái)銷毀該定時(shí)器,如果函數(shù)失敗則返回0。

通過(guò)SetTimer成員函數(shù)我們可以看出,處理定時(shí)事件可以有兩種方式,一種是通過(guò)WM_TIMER消息的消息響應(yīng)函數(shù),一種是通過(guò)回調(diào)函數(shù)。

如果要啟動(dòng)多個(gè)定時(shí)器就多次調(diào)用SetTimer成員函數(shù)。另外,在不同的CWnd中可以有ID相同的定時(shí)器,并不沖突。

time函數(shù)

返回某一特定時(shí)間的小數(shù)值。如果在輸入函數(shù)前,單元格的格式為“常規(guī)”,則結(jié)果將設(shè)為日期格式。

函數(shù) TIME 返回的小數(shù)值為 0(零)到 0.99999999 之間的數(shù)值,代表從 0:00:00 (12:00:00 AM) 到 23:59:59 (11:59:59 P.M.) 之間的時(shí)間。

語(yǔ)法:

TIME(hour, minute, second)

TIME 函數(shù)語(yǔ)法具有以下參數(shù):

Hour 必需。0(零)到 32767 之間的數(shù)值,代表小時(shí)。任何大于 23 的數(shù)值將除以 24,其余數(shù)將視為小時(shí)。例如,TIME(27,0,0) = TIME(3,0,0) = .125 或 3:00 AM。

Minute 必需。0 到 32767 之間的數(shù)值,代表分鐘。任何大于 59 的數(shù)值將被轉(zhuǎn)換為小時(shí)和分鐘。例如,TIME(0,750,0) = TIME(12,30,0) = .520833 或 12:30 PM。

Second 必需。0 到 32767 之間的數(shù)值,代表秒。任何大于 59 的數(shù)值將被轉(zhuǎn)換為小時(shí)、分鐘和秒。例如,TIME(0,0,2000) = TIME(0,33,22) = .023148 或 12:33:20 AM。

例子:

?php$t=time();echo($t . "br /");echo(date("D F d Y",$t));?

輸出:

1138618081Mon January 30 2006

如何用單片機(jī)C語(yǔ)言計(jì)算調(diào)用子函數(shù)的時(shí)間

啟動(dòng)定時(shí)器,程序可用讀取其計(jì)數(shù),或者用定時(shí)器觸發(fā)中斷,在中斷中自己用變量計(jì)數(shù),這樣就有了一個(gè)時(shí)間計(jì)數(shù)值了。再有就是利用RTC也行。

在調(diào)用子程序前讀取時(shí)間計(jì)數(shù)值,調(diào)用完畢再讀取計(jì)數(shù)值,通過(guò)計(jì)算兩個(gè)計(jì)數(shù)值的差可計(jì)數(shù)調(diào)用時(shí)間。

如果嫌麻煩,可用利用GPIO,在調(diào)用之前設(shè)置GPIO為高,調(diào)用完成設(shè)置為低,反復(fù)調(diào)用,用示波器測(cè)量GPIO正脈寬,可計(jì)算時(shí)長(zhǎng)。

標(biāo)題名稱:調(diào)用定時(shí)器子函數(shù)c語(yǔ)言 c++定時(shí)器函數(shù)
標(biāo)題路徑:http://muchs.cn/article28/hjdocp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名微信小程序、域名注冊(cè)云服務(wù)器、App設(shè)計(jì)、用戶體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)