gpt4 book ai didi

c - 在 Linux 中使用计时器记录指标

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:37:54 26 4
gpt4 key购买 nike

我需要在 linux 上的 c 中捕获一些指标,例如发送 tcp 消息的时间和每秒发送的消息数。我想知道这是否可以通过计时器完成,这样每当计时器到期时,我就简单地打印指标。主要问题是当指标递增时可能会出现计时器,在这种情况下,我的信号处理程序会打印损坏的数据。有没有办法解决这个问题?

所以我想到的伪代码是声明一个全局结构,其中包含每次发送和计数的发送时间。

struct db
{
struct sendTimes sendTimesPerSecond[10000]; // some large number which i cannot send in a second
int count;
}

在哪里

struct sendTimes
{
timeval start_time;
timeval end_time;
}

然后提供一些可以在 struct db 上工作的函数,例如

void record_send_time(pointer_to_db, sendTimes); // simply store the times
void incrementMessagesSent(pointer_to_db); //basically count++

然后我可以做类似的事情:-

signal(SIGALRM, alarm_handler);
alarm(1)
struct db database;

for(;;) {
struct sendTimes sTime;
sTime.start_time = now(); // current time
send()
sTime.end_time = now();
record_send_time(&database, sTime);
incrementMessagesSent(&database);
}


void alarm_handler(int signo)
{
printf database;
alarm(1);
}

更新:Wildplasser 关于管道的评论似乎是处理上述问题的最安全方法。

最佳答案

您可以使用 alarm_handler 设置标志而不是从信号处理程序打印。

int print_database_flag = 0; // global flag

// ...
record_send_time(&database, sTime);
if (print_database_flag) {
printf database;
print_database_flag = 0;
}

void alarm_handler(int signo)
{
print_database_flag = 1;
alarm(1);
}

关于c - 在 Linux 中使用计时器记录指标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574881/

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