计时器怎么写
- 综合知识
- 关注:2.52W次
除非你有个服务或者内核驱动的东西在一直运行,因为他的系统时间已经不可靠了,随时可以修改,你只能在安装或者说第一次运行的时候启动你的服务,你的这个服务利用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秒的,供参考
- 文章版权属于文章作者所有,转载请注明 https://dongkepu.com/zonghezhishi/9xvdeo.html