0
    for(;;)
    {
        ...// CPU usage and etc...
        printf("Server is up: %.0f sec\n",diff_time); //seconds of running for example
        sleep(1);
    }
...//other server code

我正在编写一个服务器程序。我需要每 1 秒输出一次关于 CPU 使用率等的信息……上面的代码可以工作,但循环后的服务器代码永远不会完成。任何人都知道如何用每秒都会做的事情来替换这个无限循环?不幸的是,没有线程和子进程。任何其他想法。

4

3 回答 3

1

如果服务器正在接受连接,您可以使用//select()等待可读事件。poll()epoll_wait()

您可以选择对事件使用定时等待,在该事件中您将在超时后进行定​​时处理。或者,您可以使用间隔计时器(请参阅 参考资料setitmer())。对于后者,您的警报信号处理程序可以通过写入管道来唤醒您的轮询等待,管道的读取端也正在等待可读事件。

于 2013-05-12T16:50:34.543 回答
1

嗯很有趣

如果您在 linux 中,请执行以下操作

man -a timer_create

应该能够提供解决方案,否则 点击这里

于 2013-05-12T16:56:48.040 回答
0

没有线程?甚至没有POSIX 线程?好吧,我能想到的唯一其他方法是:

/*
* Pseudocode.
* The purpose is to model what the code might look like.
*/

#include <time.h>
#include <stdio.h>

/* Initialization */
time_t t0 = time(0);

while (serverRunning) {
    /* Server code */

    if (difftime(time(0), t0) >= 60.0) {
        t0 = time(0);

        /* Print information here */
        printf("Info");
        printf("More Info");
        printf("Even More Info");
    }
}

但这是假设您的主干一开始就在 C 语言中。你能提供更多信息吗?

于 2013-05-12T16:52:25.083 回答