I want to sample values I get from a gpio 4000 times per second, currently I do something like that:
std::vector sample_a_chunk(unsigned int rate
I think the best you can probably achieve is to use absolute timing so as to avoid drift.
Something like this:
std::vector sample_a_chunk(unsigned int rate,
unsigned int block_size_in_seconds)
{
using clock = std::chrono::steady_clock;
std::vector data;
const auto times = rate * block_size_in_seconds;
const auto delay = std::chrono::microseconds{1000000 / rate};
auto next_sample = clock::now() + delay;
for(int j = 0; j < times; j++)
{
data.emplace_back(/* read the value from the gpio */);
std::this_thread::sleep_until(next_sample);
next_sample += delay; // don't refer back to clock, stay absolute
}
return data;
}