我正在使用c ++并且想要创建一个方法,该方法在给定的时间跨度(例如50微秒)之后终止,就像合同算法一样。
该方法正在使用循环,所以我的想法是使用std::chrono::high_resolution_clock::now()
测量经过时间的方法。
不幸的是,这不是很快,并且该方法的运行方式比初始方法慢。
获得相同结果的最佳/更好的方法是什么?
其他合同/随时算法如何处理此问题?
答案 0 :(得分:1)
你考虑过使用定时器中断吗?这样你就可以避免不得不进行民意调查;它反过来利用系统时钟本机的硬件来在50 ms过去时提醒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 */
}
}
答案 1 :(得分:0)
我要做的是:
有监听线程。 Monitor线程产生工作线程。 监视器线程具有等待循环,但不是繁忙的等待循环。使用&lt;&lt;&lt;&lt;&lt;&lt;子线程允许的总时间。
如果孩子的跑步时间超过了合约时间,请杀死子线程。
算法的下行。 需要巧妙处理被杀死线程的清理功能,以便在需要杀死孩子时不会让你处于不快乐状态。
如果考虑流程而不是线程,我们可以使用类似的想法。