我正在编写一个 DCPU-16 仿真器,并且通过在单独的线程中启动一个调用函数 getRealTimeCPUClock() 的线程来计算 CPU 的实时时钟速度。问题是未来对象的“有效”属性似乎是真的,即使它没有返回值。因此,当调用 futureObj.get() 时,它会等待 getRealTimeCPUClock() 返回。
使用异步启动策略(与延迟相反)是否应该将函数启动到后台,然后在返回时将有效属性设置为 true?
这是错误的用法吗?
int getRealTimeCPUClock() {
int cyclesBeforeTimer = totalCycles;
sleep(1);
return totalCycles - cyclesBeforeTimer;
}
void startExecutionOfProgram(char *programFileName)
{
size_t lengthOfProgramInWords = loadProgramIntoRAM(programFileName);
auto futureRealTimeClockSpeed = std::async(std::launch::async, getRealTimeCPUClock);
while(programCounter < lengthOfProgramInWords) {
if(futureRealTimeClockSpeed.valid()) {
realTimeClockSpeed = futureRealTimeClockSpeed.get();
futureRealTimeClockSpeed = std::async(std::launch::async, getRealTimeCPUClock);
}
step();
}
}