我正在使用 Windows 7 PC 以 1kHz 的速率输出电压。起初我只是简单地用 sleep_until(nextStartTime) 结束线程,但事实证明这是不可靠的,有时工作正常,有时长达 10 毫秒。
我在这里找到了其他答案,说繁忙的循环可能更准确,但是由于某种原因,我的循环有时也需要太长时间。
while (true) {
doStuff(); //is quick enough
logDelays();
nextStartTime = chrono::high_resolution_clock::now() + chrono::milliseconds(1);
spinStart = chrono::high_resolution_clock::now();
while (chrono::duration_cast<chrono::microseconds>(nextStartTime -
chrono::high_resolution_clock::now()).count() > 200) {
spinCount++; //a volatile int
}
int spintime = chrono::duration_cast<chrono::microseconds>
(chrono::high_resolution_clock::now() - spinStart).count();
cout << "Spin Time micros :" << spintime << endl;
if (spinCount > 100000000) {
cout << "reset spincount" << endl;
spinCount = 0;
}
}
我希望这可以解决我的问题,但是它会产生输出:
Spin Time micros :9999
Spin Time micros :9999
...
在过去的 5 个小时里,我一直被困在这个问题上,如果有人知道解决方案,我将非常感激。