除非你有個服務或者內核驅動的東西在一直運行,因為他的系統時間已經不可靠了,隨時可以修改,你只能在安裝或者説第一次運行的時候啟動你的服務,你的這個服務利用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秒的,供參考