gpt4 book ai didi

C 程序每 5 秒打印一次并在退出时显示总时间

转载 作者:行者123 更新时间:2023-11-30 14:54:42 32 4
gpt4 key购买 nike

程序应每 5 秒在屏幕上打印一次并声明“alive at %d milliseconds\n”。当用户输入<Control><A>时对于投票程序或 <Control><C>对于中断版本,程序应该停止并输出:

program terminated by user. Total time is %d milliseconds %d seconds\n .

我的程序:

#include <signal.h>
#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
#include <sys/time.h>
#include <time.h>

volatile sig_atomic_t print_flag = false;

void handle_alarm( int sig ) {
print_flag = true;
}


int main() {
struct timeval start, stop;
double secs = 0;
char key_press;
char input_key;
int ascii_value;
float time_taken;
clock_t t;
t = clock();

gettimeofday(&start, NULL);

signal( SIGALRM, handle_alarm );
alarm( 5 );

for (;;) {


if ( print_flag ) {
print_flag = false;
alarm( 5 );
gettimeofday(&stop, NULL);
secs = (double)(stop.tv_usec - start.tv_usec) / 1000000 + (double)(stop.tv_sec - start.tv_sec) * 1000;
printf("Alive at %f ms \n",secs);
input_key=getchar();
ascii_value=input_key;
if(ascii_value==1) {
t = clock() - t;
time_taken = ((float)t)/CLOCKS_PER_SEC; // in seconds
printf("total time taken= %f sec", time_taken);
break;
}
}
}
}

我希望程序连续运行,但是当我按 ctrl a 时它应该终止。程序打印“Alive at 5000.000 ms 并停止打印。如果我不添加使用 ctrl A 终止的代码,程序每 5 秒无限打印一次。如何使其工作?

最佳答案

当您以这种方式请求输入时,您正在使用同步阻塞 I/O。该进程将挂起,直到给出输入。如果您希望程序在等待输入时继续运行,则需要深入研究异步非阻塞 I/O。查找 select() 函数

https://en.wikipedia.org/wiki/Asynchronous_I/O

https://www.gnu.org/software/libc/manual/html_node/Waiting-for-I_002fO.html

关于C 程序每 5 秒打印一次并在退出时显示总时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46557658/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com