具有软实时支持的Linux C ++计时器

时间:2015-04-08 16:53:52

标签: c++ linux timer real-time

我正在为我的系统编写调度程序,它应该从传感器收集数据 我的调度程序已经列出了计划任务。调度程序在一个线程中运行并在各个线程中运行任务。

请推荐我用C ++计时器,支持软实时 我正在为vanilla Linux编写代码。

P.S。我在StackOverflow上找不到同样的问题 P.S.S抱歉我的英文不好

1 个答案:

答案 0 :(得分:0)

当您在评论中澄清软实时要求时:

  

“但我希望计时器保证睡眠时间为ms分辨率。”

从标准c ++中,您可以检查实际可用的分辨率,例如使用std::chrono::high_resolution_clock::period成员类型的std::chrono::high_resolution_clockstd::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()来实现计时器。