Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2010, 10:32   #1
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию Таймеры

Здравствуйте, помогите, пожалуйста с решением следующей проблемы: необходимо вывести на экран значение времени, затраченного на решение системных задач во время обработки задачи пользователя (для примера взял system (ps), компилирую gcc).
Пишу следующее:
Код:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>

int main(int argc, char *argv[])
{
	int i,j;
	struct itimerval it,it1;

	it.it_interval.tv_sec=1;
	it.it_interval.tv_usec=1000000;

	it.it_value.tv_sec=1;
	it.it_value.tv_usec=1000000;

	it1.it_interval.tv_sec=1;
	it1.it_interval.tv_usec=1000000;

	it1.it_value.tv_sec=1;
	it1.it_value.tv_usec=1000000;

	setitimer(ITIMER_PROF,&it,NULL);
	setitimer(ITIMER_VIRTUAL,&it1,NULL);

	for(i=0;i<100;i++)
	{
		system("ps au >> psdoc.txt");
	}

	getitimer(ITIMER_PROF,&it);
	getitimer(ITIMER_VIRTUAL,&it1);

	printf("Program work time= \n",1000000-it.it_value.tv_usec);
	printf("System work time= \n",it1.it_value.tv_usec-it.it_value.tv_usec);


  return EXIT_SUCCESS;
}
Но в результате на выходе получаю лишь "Program work time= " и "System work time= " , без значения времени. Подскажите, как можно решить данную проблему...

Последний раз редактировалось tools; 27.05.2010 в 11:16.
tools вне форума Ответить с цитированием
Старый 27.05.2010, 12:43   #2
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Как-то так
Код:
printf("Program work time= %5.2f\n",1000000-it.it_value.tv_usec);
printf("System work time= %5.2f\n",it1.it_value.tv_usec-it.it_value.tv_usec);
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 27.05.2010, 13:08   #3
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

помог формат %ld но теперь время выводится неверное:
Program work time= 1000000
System work time= 0

Кто имел дело с этими функциями, подскажите, что может быть неправильно.
tools вне форума Ответить с цитированием
Старый 30.05.2010, 23:12   #4
tools
Форумчанин
 
Регистрация: 07.10.2008
Сообщений: 213
По умолчанию

Возникли еще вопросы по данной задаче... Решил использовать системный вызов times().
Код:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <sys/times.h>

int main(int argc, char *argv[])
{
	int i,j;
	struct tms time_1,time_2;
	FILE *fp;

        times(&time_1);
	for(i=0;i<100000;i++)
	{
		fp=fopen("/home/text.txt","w+");
		if (fp==NULL)
			printf("File was not open\n");
		for(j=0;j<1000;j++);
		if (fp!=NULL)
			fclose(fp);
	}
	times(&time_2);
	printf("Пользовательское время= %ld  тиков\n",time_2.tms_utime-time_1.tms_utime);
	printf("Системное время= %ld тиков\n",time_2.tms_stime-time_1.tms_stime);
  return EXIT_SUCCESS;
}
Но в результате все время на выходе получаю, что потребленное системное время
больше потребленного пользовательского времени. Я так понимаю должно быть наоборот. Если я прав, подскажите, в чем может крыться ошибка.
Что интересно, если уменьшать количество повторений в цикле, то на определенном этапе системное время становиться меньше пользовательского.

P.S. Извиняюсь, это я неверно истолковал показания. Тему можно закрывать, проблема решена.

Последний раз редактировалось tools; 30.05.2010 в 23:39.
tools вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймеры Sergeu Общие вопросы C/C++ 2 25.03.2010 12:13
Таймеры EdNovice Общие вопросы .NET 1 06.03.2009 11:26
В чем отличия двух способов? (потоки и таймеры)) Stilet Win Api 11 31.07.2008 14:49