當前位置:首頁 » 編程語言 » c語言定時執行

c語言定時執行

發布時間: 2025-05-04 16:44:57

Ⅰ 如何用c語言實現精確軟體定時

在精度要求較高的情況下,如要求誤差不大於1ms時,可以利用GetTickCount()函數。該函數的返回值是DWORD型,表示以ms為單位的計算機啟動後經歷的時間間隔。下列的代碼可以實現50ms的精確定時,其誤差小於1ms。

// 起始值和中止值
DWORD dwStart, dwStop ;
dwStop = GetTickCount();

while(TRUE) {
// 上一次的中止值變成新的起始值
dwStart = dwStop ;
// 此處添加相應控制語句
do
{
dwStop = GetTickCount() ;
}while(dwStop - 50 < dwStart) ;
}

微軟公司在其多媒體Windows中提供了精確定時器的底層API支持。利用多媒體定時器可以很精確地讀出系統的當前時間,並且能在非常精確的時間間隔內完成一個事件、函數或過程的調用。利用多媒體定時器的基本功能,可以通過兩種方法實現精確定時。

1.使用timeGetTime()函數

該函數定時精度為ms級,返回從Windows啟動開始所經過的時間。由於使用該函數是通過查詢的方式進行定時控制的,所以,應該建立定時循環來進行定時事件的控制。

2. 使用timeSetEvent()函數

利用該函數可以實現周期性的函數調用。函數的參數說明如下:

uDelay:延遲時間;

uResolution:時間精度,在Windows中預設值為1ms;

lpFunction:回調函數,為用戶自定義函數,定時調用;

dwUser:用戶參數;

uFlags:標志參數;

TIME_ONESHOT:執行一次;

TIME_PERIODIC:周期性執行。

具體應用時,可以通過調用timeSetEvent()函數,將需要周期性執行的任務定義在lpFunction回調函數中(如:定時采樣、控制等),從而完成所需處理的事件。需要注意的是:任務處理的時間不能大於周期間隔時間。另外,在定時器使用完畢後,應及時調用timeKillEvent()將之釋放

對於精確度要求更高的定時操作,則應該使用QueryPerformanceFrequency()和QueryPerformanceCounter()函數。這兩個函數是系統提供的精確時間函數,並要求計算機從硬體上支持精確定時器。QueryPerformanceFrequency()函數和QueryPerformanceCounter()函數的原型如下:

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount);

數據類型LARGE_INTEGER既可以是一個8位元組長的整型數,也可以是兩個4位元組長的整型數的聯合結構,其具體用法根據編譯器是否支持64位而定。

在進行定時之前,先調用QueryPerformanceFrequency()函數獲得機器內部定時器的時鍾頻率,然後在需要嚴格定時的事件發生之前和發生之後分別調用QueryPerformanceCounter()函數,利用兩次獲得的計數之差及時鍾頻率,計算出事件經歷的精確時間。

Ⅱ 如何用C語言實現定時何延時功能

C語言中的兩個函數

一個是<windows.h>庫下的Sleep()

效果為當前進程等待Sleep(x)毫秒

可以實現延時功能

另一個是<time.h>下的time()

效果為返回當前時間,配合循環可以實現定時功能

以下是一個例子:

//剛寫完
#include<stdio.h>
#include<windows.h>
#include<time.h>

intmain()
{
printf("定時程序2秒後開啟 ");
Sleep(2000);
printf("定時程序開啟 ");
printf("當前時間戳是%s ",time(NULL));
return0;
}

Ⅲ c語言定時器怎麼定時兩秒

將itimerval結構的成員itinterval和成員itvalue均賦值為2秒即可。在C語言中,alarm函數、setitimer函數,這兩種定時方式都滲啟薯是通過信號來通知定時到期的,可以通過將itimerval結構的旁賣成員itinterval和成員itvalue均賦值為2秒即可。C語言是一門面向過程、抽象化的通用程序叢者設計語言,廣泛應用於底層開發,C語言能以簡易的方式編譯、處理低級存儲器。

Ⅳ 用51單片機做一個定時器,程序用C語言寫,有人會嗎

在51單片機上實現定時器功能是非常基礎的,相關原理和代碼在許多51單片機教程中都有詳細的介紹。如果你遇到困難,可以參考以下示例代碼:

#include

#define uchar unsigned char
#define uint unsigned int

uchar code shu[] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 };
uchar wei[] = { 0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f };

// 開啟0-7數碼管
uint aa = 0, chu = 0;
char num;

sbit d3 = P1^3;
sbit d1 = P1^1;
sbit d0 = P1^0;
sbit d2 = P1^2;
sbit s1 = P2^4;
sbit s2 = P2^5;

delay(uint z) {
uint x, y;
for (x = 110; x > 0; x--)
for (y = z; y > 0; y--);
}

void init () {
TMOD = 0x01;
EA = 1;
ET0 = 1;
TR0 = 1;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
}

void main() {
d3 = 0;
d2 = 0;
P0 = 0X00;
init();
while (1) {
// 寫你想寫的代碼
num += 1;
}
}

void an() interrupt 1 {
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
aa++;
if (aa == 20) {
aa = 0;
num++;
}
}

熱點內容
伺服器怎麼快速同步設置 發布:2025-05-04 19:40:08 瀏覽:678
密館疑蹤密室的密碼是多少 發布:2025-05-04 19:39:23 瀏覽:835
androidroot開發 發布:2025-05-04 19:38:40 瀏覽:431
cmd訪問伺服器 發布:2025-05-04 19:33:07 瀏覽:211
怎麼開伺服器賬號 發布:2025-05-04 19:28:54 瀏覽:61
黑魔法演算法 發布:2025-05-04 19:15:23 瀏覽:36
伺服器做rfid需要什麼 發布:2025-05-04 19:13:00 瀏覽:760
androidstudio代碼提示 發布:2025-05-04 19:10:58 瀏覽:603
win10搭建區域網代理伺服器 發布:2025-05-04 19:10:08 瀏覽:542
手機存儲什麼意思 發布:2025-05-04 19:08:01 瀏覽:799