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