Я хочу попробовать значения, которые я получаю от GPIO 4000 раз в секунду, в настоящее время я делаю что-то вроде этого:точной выборки в C++
std::vector<int> sample_a_chunk(unsigned int rate, unsigned int block_size_in_seconds) {
std::vector<std::int> data;
constexpr unsigned int times = rate * block_size_in_seconds;
constexpr unsigned int delay = 1000000/rate; // microseconds
for (int j=0; j<times; j++) {
data.emplace_back(/* read the value from the gpio */);
std::this_thread::sleep_for(std::chrono::microseconds(delay));
}
return data;
}
еще в соответствии с эталонным sleep_for гарантированно ждать по крайней мере, указанное количество времени.
Как я могу подождать до времени или, по крайней мере, достичь максимально возможной точности? Как я могу быть уверен в временном разрешении моей системы?
Вы должны использовать службы операционной системы, чтобы делать то, что вы спрашиваете. – user3344003
Невозможно поспать «точное» количество времени. Это не то, как работают компьютеры. Даже RTOS не гарантирует точные сон. Почему бы вам не понять, насколько хороши то, что у вас уже есть, прежде чем тратить время, пытаясь сделать его «лучше», когда вы не знаете, насколько хорошо это хорошо. – xaxxon
Операционная система shmoperating. Вы хотите точное время, вам нужна детерминированная система, и она записывает что-либо с потоками и прерываниями. Стремитесь к хорошему времени. Удостоверьтесь, что у вас есть разрешение по таймеру в 5-10 раз больше того, что вам нужно, и достаточно низкая латентность переключения контекста, чтобы вы никогда не спали достаточно, чтобы ухаживать. – user4581301