你可以把
do
{
dwStop = GetTickCount();
}while(dwStop-10<dwStart);
换成Sleep(10);
睡10毫秒后再发消息。
我认为最好是用多线程来处理,用单独的一个线程来定时地发送消息。
do
{
dwStop = GetTickCount();
}while(dwStop-10<dwStart);
换成Sleep(10);
睡10毫秒后再发消息。
我认为最好是用多线程来处理,用单独的一个线程来定时地发送消息。
解决方案 »
- 两个类之间值传递
- ATL属性页的问题
- 改变CComboBox那个下拉按扭的背景颜色(或者换成自己的图片好了)
- error C2872: “IXMLDOMDocumentPtr” : 不明确的符号,Microsoft Visual C++ .NET
- 请问如何在对话框输出字符?
- 数据的表示?
- 大家一般是如何来估计一个项目所需的开发时间的?
- 如何使用工具栏按钮有tooltips?
- 本人专科,预向北京打工,写程序,做网页,动画制作等行业,不知那里好不好找工作?
- [急!!]CEDIT实现鼠标单击后显示历史输入记录!!
- 如何显示24为真彩色图像?
- visualstudio2005 c++ mfc 如何读取EXCEL2003表格
GetTickCount()取出的数最高精度也只有10ms你这样做还不如直接用Sleep(10)算了
{
dwStop = GetTickCount();
Sleep(0);
}while(dwStop-10 <dwStart);
平均定时精度也就10毫秒左右,差的情况50多毫秒都有
要做实时可以想其它办法,Windows下一般有以下几种:
1.基于DSP专用硬件设计
2.数据采集卡
必须有操纵系统核心层的驱动程序配合采集卡,才能实现较高实时精度。
3. RTX (Real-Time Extension)
Windows硬件抽象层的实时扩展,具有独立的内核结构。RTX是纯软件的,定时精度最高可以在0.1ms
HANDLE CreateWaitableTimer(
LPSECURITY_ATTRIBUTES lpTimerAttributes, // SD
BOOL bManualReset, // reset type
LPCTSTR lpTimerName // object name
);
BOOL SetWaitableTimer(
HANDLE hTimer, // handle to timer
const LARGE_INTEGER *pDueTime, // timer due time
LONG lPeriod, // timer interval
PTIMERAPCROUTINE pfnCompletionRoutine, // completion routine
LPVOID lpArgToCompletionRoutine, // completion routine parameter
BOOL fResume // resume state
);
sleep(10),不知道到sleep的精度是多少
并且你循环一直在执行,
虽然我看不懂C++~~~~~~~~~~~~