我正在为我的系统编写调度程序,它应该从传感器收集数据 我的调度程序已经列出了计划任务。调度程序在一个线程中运行并在各个线程中运行任务。
请推荐我用C ++计时器,支持软实时 我正在为vanilla Linux编写代码。
P.S。我在StackOverflow上找不到同样的问题 P.S.S抱歉我的英文不好
答案 0 :(得分:0)
当您在评论中澄清软实时要求时:
“但我希望计时器保证睡眠时间为ms分辨率。”
从标准c ++中,您可以检查实际可用的分辨率,例如使用std::chrono::high_resolution_clock::period
成员类型的std::chrono::high_resolution_clock
或std::chrono::system_clock
。如果您当前的系统实现不符合要求的分辨率,您可能会抛出异常等。
以下是demo如何操作:
#include <chrono>
#include <ratio>
#include <stdexcept>
#include <iostream>
int main() {
try {
// Uncomment any of the following checks for a particular
// resolution in question
if(std::ratio_less_equal<std::nano
,std::chrono::system_clock::period>::value) {
// if(std::ratio_less_equal<std::micro
// ,std::chrono::system_clock::period>::value) {
// if(std::ratio_less_equal<std::milli
// ,std::chrono::system_clock::period>::value) {
// if(std::ratio_less_equal<std::centi
// ,std::chrono::system_clock::period>::value) {
throw std::runtime_error
("Clock doesn't meet the actual resolution requirements.");
}
}
catch(const std::exception& ex) {
std::cout << "Exception: '" << ex.what() << "'" << std::endl;
}
std::cout << "The curently available resolution is: "
<< std::chrono::system_clock::period::num << "/"
<< std::chrono::system_clock::period::den
<< " seconds" << std::endl;
}
输出(在ideone系统)是:
Exception: 'Clock doesn't meet the actual resolution requirements.'
The curently available resolution is: 1/1000000000 seconds
对于睡眠预定义的时间段,您可以使用std::thread::sleep_for()
来实现计时器。