關閉→
當前位置:知科普>綜合知識>計時器怎麼寫

計時器怎麼寫

知科普 人氣:2.23W
1. 如何寫計時器

除非你有個服務或者內核驅動的東西在一直運行,因為他的系統時間已經不可靠了,隨時可以修改,你只能在安裝或者説第一次運行的時候啟動你的服務,你的這個服務利用timer開始計時,但是即使這樣人家關機了貌似也要中斷了。

計時器怎麼寫

重啟後還是得從主板拿去時間。安裝的時候記錄系統時間比如 firsttime=2011-9-22 14:23:32開始自己計時 timer設置1分鐘一次吧 統計count 這樣當前時間就是 firsttime+Count這個驅動程序是一直在運行的 這個是前提,如果人家會停掉你的驅動就沒有辦法了,然後考慮人家關機的問題,在關機之前 比較你的時間 和系統的時間的誤差,記錄下來,開機的時候自動啟動你的服務 用開機時間加上誤差時間 ,這樣哪怕人家修改時間 也不怕 ,因為關機那一瞬間的時候你記錄了系統時間 ,再到開機的那一瞬間的時間 你讀出去主板的時間,只要保證在人家不在你保存後通過程序去修改,那麼人家想修改就只能從硬件入手了。

很多問題 ,不能保證人家不去掉你的驅動,辦法就是去掉了 就讓人家不能用不保證人家不hook你驅動的函數進行偽裝返回,這個加密,但是人家照樣能破解你加密程序。不保證人家在你的驅動保存時間過後同樣寫個驅動修改時間 不保證人家不會直接修改主板時間,這個很容易,bois裏面可以修改的,還有就是人家機箱電池也可以拔掉的這些都能讓你得不到關機過後-再次開機之間的 時間差 如果得不到這個 你也得不到正確的時間。

單機的程序驗證天數一般效果都不是很好的。可能做使用次數更好點!30天就當30次咯,就當人家一天一次,除非人家開了電腦不關,或者一直休眠/睡眠模式關機,那你軟件那麼吃香了,直接多投入些成本搞U盾之類的都划算了。

這個次數你可以保存在註冊表或者文件數據庫中,進行加密,加密代碼披上vmp,如果人家會反彙編破解你的加密程序,而且會破解vmp的話那就沒話説了,因為針對高級破解人員,即使你聯網的,怎麼防都可能不起作用,除非不提供給人家。

2. 程序設計計時器怎麼編寫程序

//Timer3初始化 下面是使用timer3做的500mA計時器,給你參考

void Timer3_Init(void)

{

//主時鐘1s

INSCON|=(1<<BKS0);

TL3=(unsigned char)T3CLK_500MS;

TH3=(unsigned char)(T3CLK_500MS>>8);

TF3=0;

switch(T3CLK_DIV)

{

case CLK_DIV_8:

T3PS0=1;

T3PS1=0; //1/8預分頻

break;

case CLK_DIV_64:

T3PS0=0;

T3PS1=1; //1/64預分頻

break;

case CLK_DIV_256:

T3PS0=1;

T3PS1=1; //1/256預分頻

break;

default:

T3PS0=0;

T3PS1=0; //無預分頻

}

T3CLKS1=0;

T3CLKS0=0;

TR3=1;

}

/************************************************/

/*Function Name:void Timer3_ISP(void)

/*Input:

/*Output:

/*Description:Timer3_ISP Interrupt

/*Data:

/************************************************/

extern void os_timer(void);

void Timer3_ISP(void) interrupt 11

{

uchar data temp_inscon;

temp_inscon=INSCON;

INSCON&=~(1<<BKS0);

os_timer(); //這個中斷500mA進來一次

INSCON=temp_inscon;

}

3. java 計時器 怎麼寫

public class Test{

public static void main(String[] args){

Runner r = new Runner();

Thread t = new Thread(r);

t.start();//這個地方要拋出異常,你在Myeclipse上會自動提示的,我忘了

}

}

class Runner implements Runnable{

public void run()

{

whie(true){

System.out.println("aaa");

Thread.sleep(10000);//設置10秒,這個地方也會拋出異常

}

}

}

總體設計是通過線程來控制時間

4. JAVA計時器,怎麼寫

import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class TimeCount extends JFrame implements ActionListener{ ThreadCount tc=new ThreadCount(this); Thread thread=new Thread(tc); JPanel panelN=new JPanel(),panelC=new JPanel(); JLabel label=new JLabel("計時器"); JButton butnStart=new JButton("開始"); boolean toEnd; public TimeCount() { setBounds(100,100,300,300); setVisible(true); label.setFont(new Font(null,Font.BOLD,22)); panelN.add(label); add(panelN,BorderLayout.NORTH); panelC.add(butnStart); add(panelC,BorderLayout.CENTER); butnStart.addActionListener(this); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent arg0) { if(arg0.getSource()==butnStart){ if(!thread.isAlive()){ thread=new Thread(tc); thread.start(); }else { toEnd=true; } } } public static void main(String[] args) { new TimeCount(); } } class ThreadCount implements Runnable{ TimeCount lc; public ThreadCount(TimeCount lc) { super(); this.lc = lc; } public void run() { int i=1; while(true){ if(lc.toEnd){ lc.toEnd=false; lc.butnStart.setText("開始"); return; } try { Thread.sleep(2); } catch (InterruptedException e) { // TODO: handle exception } i+=2; int min=i/60000; int second=(i%60000)/1000; int mm=i%1000; String show=""; if(min>0) show+=min+":"; if(second>0) show+=second+"."; show+=mm; lc.label.setText(show); } } } 滿意請採納。

5. C#計時器怎麼寫

點開始以後就跳到另外一個窗體上 這個容易吧

彈出提示框 “會彈出一個窗體説還有3分鐘” messagebox 這個容易吧

剩下的就是計時了 , 你都已經説了 用 timer控件 ,那還是百度下 timer控件的用法吧 其實就是拖一個控件過來,邏輯在控件的回調函數中使用就行了,

開始設置一個7分鐘 到點了會觸發回調,然後在回調中繼續設置為3分鐘 啟動timer 到點後又觸發回調 細節處理好就行,閒麻煩搞兩個timer ,或者讓timer回調一分鐘就觸發 觸發完成用個變量保存累加時間 如果是7分鐘就是提示 ,10分鐘關閉。每次回調完成後繼續啟動該timer繼續計時直到10分鐘停止

6. 怎樣寫一個高精度的計時器

你的需求有問題,考慮一下是否必須達到毫秒精度。

一般來説遊戲也只要20ms左右精度即可,可以用多媒體定時器來實現。

必須包含:

#include <windows.h>

#include <mmsystem.h>

#pragma comment(lib,"winmm.lib")

使用多媒體定時器timeSetEvent()函數,該函數定時精度為ms級。利用該函數可以實現週期性的函數調用。如示例工程中的Timer6和Timer6_1。函數的原型如下:

MMRESULT timeSetEvent( uiNT uDelay,

UINT uResolution,

LPTIMECALLBACK lpTimeProc,

WORD dwUser,

UINT fuEvent )

該函數設置一個定時回調事件,此事件可以是一個一次性事件或週期性事件。事件一旦被激活,便調用指定的回調函數, 成功後返回事件的標識符代碼,否則返回NULL。函數的參數説明如下:

uDelay:以毫秒指定事件的週期。

Uresolution:以毫秒指定延時的精度,數值越小定時器事件分辨率越高。缺省值為1ms。

LpTimeProc:指向一個回調函數。

DwUser:存放用户提供的回調數據。

FuEvent:指定定時器事件類型:

TIME_ONESHOT:uDelay毫秒後只產生一次事件

TIME_PERIODIC :每隔uDelay毫秒週期性地產生事件。

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

QueryPerformanceCount是按CPU頻率(想想看吧2.5GHz)來計數的,很耗資源的,理論上可以達到微秒級,不過還要考慮windows進程調度。

另windows本來就不是實時操作系統,你的期望不要太高。

實時要求高的話,工程上用單片機比較多。

7. 用c語言怎麼寫秒計時器

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar tt,num;

uchar shi,ge,temp;

uchar code table[]=

{0x3f,0x06,0x5b,0x4f,<br>0x66,0x6d,0x7d,0x07,<br>0x7f,0x6f};

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void display(uchar shi,uchar ge)

{

shi=temp/10;

ge=temp%10; P2=table[shi];

P3=0xfe;

delay(1);

P2=0x00; P2=table[ge];

P3=0xfd;

delay(1);

P2=0x00;

}

void timer0() interrupt 1

{

TH0=-50000/256;

TL0=-50000%256;

tt++;

if(tt>=20)

{

tt=0;

temp++;

if(temp==60)

temp=0;

}

}

void init()

{

TMOD=0x01;

TH0=-50000/256;

TL0=-50000%256;

EA=1;

ET0=1;

TR0=1;

tt=0;

temp=0;

}

void main()

{

init();

while(1)

{

display(shi,ge);

}

} 這個是60秒的,供參考

TAG標籤:#計時器 #