2013-05-12 4 views
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 секунду о загрузке процессора и т. Д. Код выше работает, но код сервера после цикла никогда не будет завершен. Кто-нибудь знает, как заменить этот цикл бесконечности тем, что будет делать каждую секунду? К сожалению, без потокового и дочернего процесса. Любые другие идеи.заменить бесконечную петлю без новой резьбы

+1

без другого потока/процесса, я не думаю, что это возможно. Нет, если вам особенно нравится 1 секунда. –

+0

Это полностью зависит от того, что делает ваш сервер. (подсказка: уже есть потоки) – SLaks

+0

Возможно, вы можете использовать оболочку для мониторинга сервера для вас, используя 'watch' в сочетании с запуском вашего сервера. –

ответ

1

хммм интересно

, если вы находитесь в Linux сделать ниже

человек -a timer_create

должен быть в состоянии обеспечить решение в противном случае Click Here

1

Если сервер принимает соединения, вы можете использовать select()/poll()/epoll_wait(), чтобы дождаться читаемого события.

Вы можете выбрать время ожидания события, в котором вы будете выполнять тайминги после таймаута. Или вы можете использовать интервальный таймер (см. setitmer()). Для последнего ваш обработчик сигнала тревоги может вызвать ожидание вашего опроса, записав его в pipe, где его прочитанный конец также ожидает читаемого события.

+0

Я предлагаю не использовать 'select' (google для' C10K problem' ....), 'poll' и' epoll' лучше ... –

+0

@BasileStarynkevitch: Я согласен, что 'epoll' лучше всего использовать на' Linux' , Я упоминаю других, потому что литература на однопоточных параллельных серверах по-прежнему в значительной степени использует их в своих примерах. – jxh

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, чтобы начать с. Не могли бы вы предоставить дополнительную информацию?

Смежные вопросы