c++ - 停止合约算法的最佳方式?

标签 c++ algorithm c++-chrono contract

我正在使用 C++ 并想创建一个方法,它像契约(Contract)算法一样在给定的时间跨度(例如 50 微秒)后终止。

该方法使用循环,所以我的想法是使用 std::chrono::high_resolution_clock::now() 测量耗时的方法。

不幸的是,这不是很快,而且该方法的运行速度比最初的方法慢得多。

达到相同结果的最佳/更好方法是什么?

其他合约/随时算法如何处理这个问题?

最佳答案

您是否考虑过使用定时器中断?这样你就可以避免轮询;相反,它利用系统时钟的 native 硬件在 50 毫秒过去时提醒您的 CPU。在不知道循环的确切结构的情况下,它可能看起来像这样:

#include <sys/time.h>

bool flag;
void handler(int signum){
    flag = true;
}


int main (){
    struct sigaction s_action;
    struct itimerval timer;

    memset (&s_action, 0, sizeof (s_action));
    s_action.sa_handler = &handler;
    sigaction (SIGVTALRM, &s_action, NULL);


    timer.it_value.tv_sec = 0;
    timer.it_value.tv_usec = 50000;         // 50 ms until next signal
    timer.it_interval.tv_sec = 0;
    timer.it_interval.tv_usec = 50000;      // 50 ms between signals

    setitemer(ITIMER_VIRTUAL, &timer, NULL);

    flag = false;
    while(true){
        if(flag)
            break;
        /* do stuff */
    }
}

关于c++ - 停止合约算法的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37328471/

相关文章:

c++ - 在类和类的标题中重载 << 运算符时遇到问题

c++ - 是否可以将 boost::foreach 与 std::map 一起使用?

c++ - 有没有办法将零分配给 std::chrono::nanoseconds

c++ - 如何将字符串与 chrono::milliseconds 连接起来?

c++ - 如何使用C++ 11声明静态查找表

c++ - malloc 中的段错误 :

c++ - 在与多个字段进行比较时提供严格的排序

javascript - 分配工作人员任务

python - 生成时将额外的分支添加到树中

c++ - 使用 std::chrono 两个日期之间还剩多少天