在没有新线程的情况下替换无限循环

时间:2013-05-12 16:41:24

标签: c linux unix process

    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使用率的信息等... 上面的代码有效,但循环后的服务器代码永远不会完成。 任何人都知道如何用每秒钟会做的事情来替换这个无限循环? 不幸的是,没有线程和子进程。任何其他想法。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

嗯,有趣的是

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

man -a timer_create

应该能够提供解决方案 Click Here

答案 2 :(得分:0)

没有线程?甚至不是POSIX threads?好吧,我能想到的另一种方式是:

/*
* 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中开始。您能提供更多信息吗?