当前位置:懂科普 >

综合知识

> 计时器怎么写

计时器怎么写

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秒的,供参考

标签: 计时器
  • 文章版权属于文章作者所有,转载请注明 https://dongkepu.com/zonghezhishi/9xvdeo.html