WINDOWS98中用VC++编程能够实现精确的微秒级的延时吗?

maosquirrel 2001-12-19 08:49:54
本人从事步进电机的控制工作原来的程序在DOS622下面用控制8253的方法可以得到微秒级的延时。但到了WINDOWS98下就不行了,查了很多的资料都说WINDOWS98用VC++编程只能
精确到1毫秒。不知那位高手能够解答。
QQ131039
MAIL MAOMAO1603@SINA.COM
...全文
88 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
地平线 2001-12-20
  • 打赏
  • 举报
回复
不太可能,因为windows本身就不是实时的操作系统,而是靠消息驱动的,
2000还是抢占式,98则不行
NowCan 2001-12-20
  • 打赏
  • 举报
回复
楼上的方法是不是用插入nop指令来达到延时?但由于你这个线程是实时优先级,这样其他程序就都停止响应了。我试过一次,结果连系统热键都失效了。
ourworld 2001-12-20
  • 打赏
  • 举报
回复
将你的线程优先级提高至实时,这可以避免系统的线程调度,而后根据指令执行时间精确延时
此方法即使对Windows 2000 DataCenter也是有效的
前提:知道CPU频率以精确计算nop指令时间;系统中不能同时有多个这样优先级的线程;该优先级下运行时间最好不要大于一个时间片。
例子:
SetPriorityClass(
hProcess, // handle to process
REALTIME_PRIORITY_CLASS // priority class
); //以保证进程有限类属正确
SetThreadPriority(
hThread, // handle to the thread
THREAD_PRIORITY_TIME_CRITICAL // thread priority level
); //提高线程优先级到实时
但有副作用:延时过长将降低系统性能,并导致系统后台服务不正常,建议延时结束后将线程调回低的优先级
NowCan 2001-12-20
  • 打赏
  • 举报
回复
各位,看清楚,是延时,不是计算时间。
写个例子出来看看吧。
xxtliu 2001-12-20
  • 打赏
  • 举报
回复
就是它QueryPerformanceFrequency


masterz 2001-12-19
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/Topic/350/350244.shtm
//设置多媒体定时器
QueryPerformanceFrequency

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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