社区
Windows SDK/API
帖子详情
c++ builder如何产生频率为8000hz的定时操作
stray1718
2011-05-07 10:41:11
rt,谢谢
...全文
225
17
打赏
收藏
c++ builder如何产生频率为8000hz的定时操作
rt,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
17 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
huzhangyou
2011-08-08
打赏
举报
回复
对于精确度要求更高的定时操作,则应该使用QueryPerformanceFrequency()和 QueryPerformanceCounter()函数。这两个函数是VC提供的仅供Windows 95及其后续版本使用的精确时间函数,并要求计算机从硬件上支持精确定时器。如示例工程中的Timer7、Timer7_1、Timer7_2、Timer7_3。
QueryPerformanceFrequency()函数和QueryPerformanceCounter()函数的原型如下:
BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);
BOOL QueryPerformanceCounter(LARGE_INTEGER *lpCount);
参考
http://www.cppblog.com/xpzhou/archive/2007/04/20/22426.html
cankoo
2011-08-06
打赏
举报
回复
理论上可以!
rickys2080
2011-08-04
打赏
举报
回复
Timer控件最低精度好像是50ms
痞子酷
2011-07-25
打赏
举报
回复
struct timeval timeout ;
//struct timeval {
// int tv_sec; /* seconds */
// int tv_usec; /* microseconds */
//
FD_ZERO(&fdR);
FD_SET(fd1,&fdR);
select(fd1+1, &fdR, NULL, NULL,&timeout)
痞子酷
2011-07-25
打赏
举报
回复
采用线程和函数 select也许能精确到,但取决于电脑主频
fbmsyu
2011-07-25
打赏
举报
回复
不可能的。别费劲了。windows不支持
zz997788
2011-07-23
打赏
举报
回复
我觉得不是软件能实现的事,就丢给硬件去做,如果是单片机做应该没问题。
sterrys
2011-07-19
打赏
举报
回复
硬件中断
日立奔腾浪潮微软松下联想
2011-07-19
打赏
举报
回复
PC中,不用附加的硬件,基本上只有CMOS RTC中断(IRQ 8)可以达到这种要求,保证8K肯定没问题,大部分都可以到32K,某些RTC芯片,通过设置可以工作在4MHz的中断率。无论如何,得写ring 0级的驱动才行,用户模式的驱动应该不行。
LuoGD
2011-06-02
打赏
举报
回复
WINDOWS下实现不了,只是理论上可以!
My_Love
2011-05-30
打赏
举报
回复
在Windos下,如果驱动正在进行一些费时操作,别说1ms、55ms就是1s都不一定能保证。
Bosman
2011-05-30
打赏
举报
回复
HANDLE hTimer=CreateWaitableTimer(NULL,false,NULL);
LARGE_INTEGER liDueTime;
liDueTime.QuadPart=-10000000*LoginSecond;//1秒;
SetWaitableTimer(hTimer,&liDueTime,0,NULL,NULL,false);
while(!Terminated)
{
if (WaitForSingleObject(hTimer,1500)==WAIT_OBJECT_0)
{
if (Terminated||!ptrHttpProc[WebID]||ptrHttpProc[WebID]->pAccountLogin||ptrHttpProc[WebID]->HaveLogin)
break;
ptrHttpProc[WebID]->pReLogin=NULL;//login消息判断pRelogin,必须先置Null
PostThreadMessage(ptrHttpProc[WebID]->ThreadID,WM_LG_Login,0,0);
break;
}
}
CancelWaitableTimer(hTimer);
CloseHandle(hTimer);
土著巫师
2011-05-28
打赏
举报
回复
1毫秒震荡8次?!还是找实时操作系统吧,WINDOWS平台应该不可以达到这个实时性要求,之前在WIDNOWS平台上用SDK改过一个多媒体时钟用,你可以在网上找一下,但我以为也达不到你要求的精度。
xjq2003
2011-05-07
打赏
举报
回复
C++ Builder等都有专用的定时器控件Timer,而且使用很方便,可以实现一定的定时功能,但最小计时精度仅为55ms,且定时器消息在多任务操作系统中的优先级很低,不能得到及时响应,往往不能满足实时控制环境下的应用。不过Microsoft公司
在Win32 API函数库中已经为用户提供了一组用于高精度计时的底层函数,如果用户使用得当,计时精度可到1ms。这个计时精度、对于一般的实时系统控制完全可以满足要求。现将由C++ Builder 4.0提供的重新封装后的一组与时间相关的主要接口函数(函数名、参数、功能与Win32 API基本相同)说明如下:
1.DWORD timeGetTime(void)
返回从Windows启动开始经过的毫秒数。最大值为232,约49.71
天。
2.MMRESULT timeSetEvent(
UINT uDelay,
UINT uResolution,
LPTIMECALLBACK lpTimeProc,
DWORD dwUser,
UINT fuEvent
)
该函数设置一个定时回调事件,此事件可以是一个一次性事件或周期性事件。事件一旦被激活,便调用指定的回调函数,成功后返回事件的标识符代码,否则返回NULL。参数说明如下:
uDelay:以毫秒指定事件的周期。
UResolution:以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。
LpTimeProc:指向一个回调函数。
DwUser:存放用户提供的回调数据。
FuEvent:指定定时器事件类型:
TIME_ONESHOT:uDelay毫秒后只产生一次事件
TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件。
3.MMRESULT timeKillEvent(UINT uTimerID)
该函数取消一个指定的定时器回调事件。uTimerID标识要取消的事件(由timeSetEvent函数返回的标识符)。如果成功则返回TIMERR_NOERROR
,如果定时器时间不存在则返回MMSYSERR_INVALPARAM。
void CALLBACK TimeProc(
UINT uID,
UINT uMsg,
DWORD dwUser,
DWORD dw1,
DWORD dw2
);
该函数是一个应用程序定义的回调函数,出现定时器事件时该函数被调用。TimeProc是应用程序定义的函数名的占位符。使用该函数时要注意
的是,它只能调用以下有限的几组API函数:PostMessage,timeGetSystemTime, timeGetTime, timeSetEvent,timeKillEvent,midiOutShortMsg, midiOutLongMsg,OutputDebugString。同时也不要使用完成时间很长的API函数,程序尽可能简短。
使用以上一组函数就可以完成毫秒级精度的计时和控制(在C++Builder中使用时要将头文件mmsystem.h加到程序中)。由于将定时控制精确到几毫秒,定时器事件将占用大量的CPU时间和系统资源,所以在满足控制要求的前提下,应尽量将参数uResolution的数值增大。而且定时器实时控制功能完成后要尽快释放
本文来自: 中科软件园(www.4oa.com) 详细出处参考:http://www.4oa.com/Article/html/6/33/487/2005/17557.html
xjq2003
2011-05-07
打赏
举报
回复
使用线程,延时
weidp2004
2011-05-07
打赏
举报
回复
创建一个线程,建立一个死循环,然后启用微秒级计时,检测到微秒到达时触发事件!详细代码以后提供
stray1718
2011-05-07
打赏
举报
回复
timesetevent只能精确到1ms,最大频率也就到1000hz,不能满足要求啊
C++
中的时间
C/
C++
时间函数使用方法介绍 在C/
C++
中,对字符串的
操作
有很多值得注意的问题,同样,C/
C++
对时间的
操作
也有许多值得大家注意的地方。最近,在技术群中有很多网友也多次问到过
C++
语言中对时间的
操作
、获取和显示等等...
Java高手真经
1.移位运算符>> :左移运算符,向左移动若干位,高位丢弃,低位补零。x >> 1 相当于 x乘以2(不...移位
操作
符实际上支持的类型只有int和long,编译器在对short、byte、char类型进行移位前,都会将其转换为int类型再
操作
。
Redis的简单使用
底层实际是一个双向链表,对两端的
操作
性能很高,通过索引下表的
操作
中间的节点性能会较差;Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当需要存储一个列表数据又不希望...
一篇了解Redis
facebook , twitter等这样的网站,每天都会
产生
海量的数据,几亿,十几亿的数据量。淘宝,腾讯都拥有庞大的用户群。每天的访问量都是用亿来计算。用户账号也都以亿计算的。传统的 RDBMS 是难 以处理这样的数据的。...
常用电脑资料速查
总目录1.《BIOS报警声意义》2.《BIOS自检与开机故障相关问题》3....《WindowsXP
操作
系统进程 》10.《[续]一般程序进程)》11.《网页恶意代码的手工处理》12.《电脑重启故障》13.《光驱常见故障》14.《显示器抖
Windows SDK/API
1,221
社区成员
8,136
社区内容
发帖
与我相关
我的任务
Windows SDK/API
C++ Builder Windows SDK/API
复制链接
扫一扫
分享
社区描述
C++ Builder Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章