samedi 26 septembre 2015

Run loop every millisecond with sleep_for

I want to run a loop inside a thread that calculates some data every millisecond. But I am having trouble with the sleep function. It is sleeping much too long.

I created a basic console application in visual studio:

#include <windows.h>
#include <iostream>
#include <chrono>
#include <thread>

using namespace std;
typedef std::chrono::high_resolution_clock Clock;

int _tmain(int argc, _TCHAR* argv[])
{
    int iIdx = 0;
    bool bRun = true;

    auto aTimeStart = Clock::now();

    while (bRun){
        iIdx++;
        if (iIdx >= 500) bRun = false;

        //Sleep(1);
        this_thread::sleep_for(chrono::microseconds(10));
    }

    printf("Duration: %i ms\n", chrono::duration_cast<std::chrono::milliseconds>(Clock::now() - aTimeStart).count());

    cin.get();

    return 0;
}

This prints out: Duration: 5000 ms The same result is printed, when i use Sleep(1);

I would expect the duration to be 500 ms, and not 5000 ms. What am I doing wrong here?

Aucun commentaire:

Enregistrer un commentaire