zoukankan      html  css  js  c++  java
  • 【共享】WinCE 6.0中精确定时的实现

    借用了网友关于win32平台精确定时的方法,将平台调用中的kernel32.dll换成coredll.dll即可。经测试,时间精度到ms以下

    using System;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;

    namespace SmartDeviceProject3
    {
    public partial class MainForm : Form
    {
    public MainForm()
    {
    InitializeComponent();
    }

    private void MainForm_Paint(object sender, PaintEventArgs e)
    {
    int sum=1;
    HiPerfTimer pt
    = new HiPerfTimer(); // 创建新的 HiPerfTimer 对象
    pt.Start(); // 启动计时器
    for (int i = 1; i < 100000; i++)
    {
    sum
    *= i;
    }
    pt.Stop();
    // 停止计时器
    MessageBox.Show(pt.Duration.ToString());//执行时间按2.35ms,SBC8100开发板
    }
    class HiPerfTimer
    {
    [DllImport(
    "coredll.dll")]
    private static extern bool QueryPerformanceCounter(
    out long lpPerformanceCount);

    [DllImport(
    "coredll.dll")]
    private static extern bool QueryPerformanceFrequency(
    out long lpFrequency);

    private long startTime, stopTime;
    private long freq;

    // 构造函数
    public HiPerfTimer()
    {
    startTime
    = 0;
    stopTime
    = 0;

    if (QueryPerformanceFrequency(out freq) == false)
    {
    // 不支持高性能计数器
    throw new System.Exception("High performance timer not supported");
    }
    }

    // 开始计时器
    public void Start()
    {
    // 来让等待线程工作
    System.Threading.Thread.Sleep(0);

    QueryPerformanceCounter(
    out startTime);
    }

    // 停止计时器
    public void Stop()
    {
    QueryPerformanceCounter(
    out stopTime);
    }

    // 返回计时器经过时间(单位:毫秒)
    public double Duration
    {
    get
    {
    return ((double)(stopTime - startTime) / (double)freq) * 1000;
    }
    }
    }
    }
  • 相关阅读:
    Alpha阶段项目展示
    Alpha阶段测试报告
    300种常用非处方中成药--06骨伤科用药/07皮肤科用药
    300种常用非处方中成药--05五官科用药
    300种常用非处方中成药--04儿科用药
    300种常用非处方中成药--02外科用药/03妇科用药
    300种常用非处方中成药-01内科用药
    文科思人,理科格物
    谁动我的奶酪--经典句子
    博士 水上飘
  • 原文地址:https://www.cnblogs.com/hust_wsh/p/1998399.html
Copyright © 2011-2022 走看看