c# 里如何实现精确定时?

wanglovec 2008-09-17 02:41:14
大家帮帮忙啊, 听说可以调用API解决 但不知道具体怎么搞 大家给点代码看看
...全文
730 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuqing_xipy 2010-10-08
  • 打赏
  • 举报
回复
学习一下
wxy8000 2008-12-27
  • 打赏
  • 举报
回复
谢谢
lsd123 2008-09-18
  • 打赏
  • 举报
回复
kong521 2008-09-17
  • 打赏
  • 举报
回复
顶lovehongyun
lovehongyun 2008-09-17
  • 打赏
  • 举报
回复
throw new InvalidOperationException(Resource.GetResource("Unit_TimeVariableIsNull"));
throw new InvalidOperationException(Resource.GetResource("Unit_TimeVariableIsNull"));
其中这两个异常的message是读的Resource中的..你可以先改掉:)
lovehongyun 2008-09-17
  • 打赏
  • 举报
回复
测吧.

start()和stop()后直接获取计时的时间即可.
本人测试过.
wanglovec 2008-09-17
  • 打赏
  • 举报
回复
谢谢 楼上 结帖去

我测试下
lovehongyun 2008-09-17
  • 打赏
  • 举报
回复
以前的一贴子中看到的.
lovehongyun 2008-09-17
  • 打赏
  • 举报
回复

using System;
using System.Threading;
using System.ComponentModel;
using System.Runtime.InteropServices;

namespace Sanxing.WebComponent.Unit
{
/// <summary>
/// 进行精确操作计时的类。
/// </summary>
public sealed class RunTime
{
// ----- 私有对象
[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceFrequency(out long lpFrequency);

[DllImport("Kernel32.dll")]
private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);

private long startTime,stopTime;
private long freq;

/// <summary>
/// 初始化 <see cref="RunTime"/> 类的新实例。
/// </summary>
public RunTime()
{
this.startTime = 0;
this.stopTime = 0;

if(QueryPerformanceFrequency(out freq) == false)
throw new Win32Exception();
}

/// <summary>
/// 开始执行计时。
/// </summary>
public void Start()
{
Thread.Sleep(0);
QueryPerformanceCounter(out startTime);
}

/// <summary>
/// 停止计时。
/// </summary>
public void Stop()
{
QueryPerformanceCounter(out stopTime);
}

/// <summary>
/// 获取计时后得到的计时时间。(单位为秒)
/// </summary>
public double DurationSecs
{
get
{
// 判断是否执行了开始和结束
if(startTime == 0 || stopTime == 0)
throw new InvalidOperationException(Resource.GetResource("Unit_TimeVariableIsNull"));
return (double)(stopTime - startTime)/(double)freq;
}
}

/// <summary>
/// 获取计时后的计时时间。(单位为毫秒)
/// </summary>
public float DurationMsel
{
get
{
if(startTime == 0 || stopTime == 0)
throw new InvalidOperationException(Resource.GetResource("Unit_TimeVariableIsNull"));
return float.Parse((this.DurationSecs * 1000).ToString("##0.###"));
}
}
}
}
ZengHD 2008-09-17
  • 打赏
  • 举报
回复
我很期待QueryPerformanceFrequency()、QueryPerformanceCounter()
这两个函数的使用方法
wjq 2008-09-17
  • 打赏
  • 举报
回复
QueryPerformanceFrequency()和QueryPerformanceCounter()
以及一些winmm.dll里的函数,你可以google一下“C 精确计时”,然后自己翻译成C#
lovehongyun 2008-09-17
  • 打赏
  • 举报
回复
QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数
就这两吧.

精度会高些.
wanglovec 2008-09-17
  • 打赏
  • 举报
回复
呵呵 谢谢 ZengHD 你可真快

wanglovec 2008-09-17
  • 打赏
  • 举报
回复
服务器程序 长时间运行,误差尽可能的小 所以需要 精确点啊

ls 你那是取 毫秒啊 ! 我需要的是 精确定时 误差小
ZengHD 2008-09-17
  • 打赏
  • 举报
回复
QueryPerformanceFrequency() 和 QueryPerformanceCounter()函数
具传说误差不会超过1毫秒,你可以查查相关资料,我可没玩过这么厉害的
我姓区不姓区 2008-09-17
  • 打赏
  • 举报
回复
DateTime.Now.Millisecond??
真不知道你想问什么
ZengHD 2008-09-17
  • 打赏
  • 举报
回复
GetTickCount??
可能也有误差

我记得还有几个API
wanglovec 2008-09-17
  • 打赏
  • 举报
回复
timer 会有误差啊, 我需要 精确到毫秒
服务器每隔500毫秒 发一次数据
尽可能小的误差 (7*24 小时运行的)
春天的气息 2008-09-17
  • 打赏
  • 举报
回复
请查看time的相关内容。
yoyoalphax 2008-09-17
  • 打赏
  • 举报
回复
timer?
加载更多回复(7)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧