我正在使用 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/