C++ 在c+;中,每n秒调用一个函数最有效的方法是什么+;?
所以我试着每n秒调用一个函数。下面是我试图实现的一个简单表示。我想知道下面的方法是否是实现这一目标的唯一方法。如果可以避免“如果”的情况,我会很高兴C++ 在c+;中,每n秒调用一个函数最有效的方法是什么+;?,c++,C++,所以我试着每n秒调用一个函数。下面是我试图实现的一个简单表示。我想知道下面的方法是否是实现这一目标的唯一方法。如果可以避免“如果”的情况,我会很高兴 #include <stdio.h> #include <time.h> void print_hello(int i) { printf("hello\n"); printf("%d\n", i); } int main () { time_t start_t, end_t; double diff
#include <stdio.h>
#include <time.h>
void print_hello(int i) {
printf("hello\n");
printf("%d\n", i);
}
int main () {
time_t start_t, end_t;
double diff_t;
time(&start_t);
int i = 0;
while(1) {
time(&end_t);
// printf("here in main");
i = i + 1;
diff_t = difftime(end_t, start_t);
if(diff_t==5) {
// printf("Execution time = %f\n", diff_t);
print_hello(i);
time(&start_t);
}
}
return(0);
}
#包括
#包括
无效打印\你好(int i){
printf(“hello\n”);
printf(“%d\n”,i);
}
int main(){
时间开始,结束;
双差;
时间(和开始时间);
int i=0;
而(1){
时间(和结束时间);
//printf(“此处主要”);
i=i+1;
差异时间=差异时间(结束、开始);
如果(差异=5){
//printf(“执行时间=%f\n”,不同);
打印你好(i);
时间(和开始时间);
}
}
返回(0);
}
OPs程序中的时间使用可以减少到
// get tStart;
// set tEnd = tStart + x;
do {
// get t;
} while (t < tEnd);
(我必须减少迭代次数和等待时间,以防止在线编译器中出现错误。)
阻止当前线程的执行,直到达到指定的睡眠时间
使用与睡眠时间相关的时钟,这意味着考虑时钟的调整。因此,块的持续时间可能小于或大于调用时的sleep_time-Clock::now(),这取决于调整的方向。由于调度或资源争用延迟,该函数的阻塞时间也可能长于达到睡眠时间之后
最后一句提到了这个解决方案的退步:操作系统可能决定在请求的时间之后唤醒线程/进程。可能发生这种情况,例如操作系统处于高负载状态。在“正常”情况下,延迟不应超过几毫秒。因此,延迟可能是可以忍受的
请注意
tEnd
和tStart
在循环中是如何更新的。当前唤醒时间不被认为是为了防止延迟的累积。在OPs程序中,时间的使用可以减少为
// get tStart;
// set tEnd = tStart + x;
do {
// get t;
} while (t < tEnd);
(我必须减少迭代次数和等待时间,以防止在线编译器中出现错误。)
阻止当前线程的执行,直到达到指定的睡眠时间
使用与睡眠时间相关的时钟,这意味着考虑时钟的调整。因此,块的持续时间可能小于或大于调用时的sleep_time-Clock::now(),这取决于调整的方向。由于调度或资源争用延迟,该函数的阻塞时间也可能长于达到睡眠时间之后
最后一句提到了这个解决方案的退步:操作系统可能决定在请求的时间之后唤醒线程/进程。可能发生这种情况,例如操作系统处于高负载状态。在“正常”情况下,延迟不应超过几毫秒。因此,延迟可能是可以忍受的
请注意tEnd
和tStart
在循环中是如何更新的。当前唤醒时间不被视为防止延迟累积