我正在开发一个需要持续〜1ms睡眠的程序。使用睡眠是为了生成长度约为1 ms的硬件脉冲。
我正在使用以下代码进行睡眠
void usleep(__int64 usec)
{
HANDLE timer;
LARGE_INTEGER ft;
ft.QuadPart = -(10*usec); // Convert to 100 nanosecond interval, negative value indicates relative time
timer = CreateWaitableTimer(NULL, TRUE, NULL);
SetWaitableTimer(timer, &ft, 0, NULL, NULL, 0);
WaitForSingleObject(timer, INFINITE);
CloseHandle(timer);
}
取自here
[当我在Intel i7上使用以上代码(使用Embarcaderos bcc32编译器)时,经过1000(1毫秒),我得到的睡眠是使用Poco's timestamp函数测得的,约为1毫秒。代码本身在线程中执行。
代码看起来像这样:
mDebugFile << std::setprecision (17) << mPulseEventTime.elapsed()/1000.0 << "\t" << 0 << "\n";
setHigh(false);
mDebugFile << std::setprecision (17) << mPulseEventTime.elapsed()/1000.0 << "\t" << 1 << "\n";
usleep(1000);
mDebugFile << std::setprecision (17) << mPulseEventTime.elapsed()/1000.0 << "\t" << 1 << "\n";
setLow(false);
mDebugFile << std::setprecision (17) << mPulseEventTime.elapsed()/1000.0 << "\t" << 0 << "\n";
其中mDebugFile是fstream对象,而setLow / setHigh是对硬件的调用。
但是,当在Xeon CPU]上执行相同的代码时,睡眠被测量为大约10 ms。假设Poco的计时功能提供了适当的时间,则要求1ms时10ms相当大。
还有其他方法可以使〜1ms的可靠睡眠吗?是否可以修改Windows操作系统以提供更可靠的睡眠?
我无权使用Boost或更高版本的C ++ 11功能。
我正在开发一个需要持续〜1ms睡眠的程序。使用睡眠是为了生成长度约为1 ms的硬件脉冲。我将以下代码用于睡眠void usleep(__ int64 ...
Windows不是实时操作系统,因此将永远无法保证在用户代码中获得超精确的睡眠时间。有很多东西在玩。