c ++ - travlt spinding i stedet for at sove for tidskritiske situationer

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg snuble over et problem, der påberåber nogle tidskritiske funktionaliteter. Min tråd skal udføre nogle handlinger og derefter sove for præcis 60ms. Siden krævet platform er Windows (sprog C ++) og jeg ved, at det virkelig har problemer med tidsmålinger som dette, fik jeg en ide at øge nøjagtigheden af ​​trådsøvn.


I stedet for:


void run() {
    do\_some\_action();
    sleep(60); // ms
}


Jeg ville gerne gøre det sådan:


void run() {
    do\_some\_action();
    curr\_time = get\_time\_in\_nanosec(); // with QueryPerformanceFrequency/QueryPerformanceCounter
    while(get\_time\_in\_nanosec() - curr\_time < 60000000 /*60ms*/) {}
}


Er det værd at bruge ekstra CPU-brug, og hvordan kunne jeg måle ydeevne (sover den korrekt)?

Bedste reference