The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Распечатка 8.9 Использование eProf

Распечатка 8.9 Использование eProf

Предыдущая  Содержание  Следующая V*D*V

Распечатка 8.9.

 

/* prof.c */

 

#include <pthread.h>

 

/*

 * Заголовочный файл eProf. Исходный код разных интерфейсов eProf

 * находится в eprof.c

 */

#include "eprof.h"

#define MAX_LOOP 10 // счётчик циклов

 

/*

 * Эта функция работает в контексте разных потоков. Здесь мы

 * профилируем время, затраченное на выполнение основного цикла

 * функции

 */

void func_1(void * dummy){

  int i;

  /*

   * Создаём экземпляр профилировщика. Назначаем ему имя –

   * ‘func1’

   */

  int id = eprof_alloc("func1");

 

  /*

   * Запускаем профилировщик. Аргументом является идентификатор

   * экземпляра, возвращаемый eprof_alloc

   */

  eprof_start(id);

 

  /* Мы профилируем этот цикл */

  for (i = 0; i < MAX_LOOP; i++){

    usleep(1000*1000);

  }

 

  /*

   * Останавливаем профилировщик. Мы печатаем результаты

   * профилирования в конце программы

   */

  eprof_stop(id);

}

 

/*

 * В этот примере мы профилируем каждую итерацию цикла.

 * Эта функция вызывается в main.

 */

void func_2(void){

  int i;

  /* Создаём экземпляр профилировщика */

  int id = eprof_alloc("func2");

 

  /*

   * Как видите, мы вызываем пару eprof_start и eprof_stop

   * много раз. Профилировщик записывает общее число раз

   * вызова этой пары, а затем показывает результаты,

   * усредняя их

   */

  for (i = 0 ; i < MAX_LOOP; i++){

    /* Запускаем профилировщик */

    eprof_start(id);

    usleep(500*1000);

    /* Останавливаем профилировщик */

    eprof_stop(id);

  }

}

 

/*

 * Основное приложение. Оно создаёт поток, запускающий функцию

 * func_1. Затем оно вызывает func_2 и ждёт завершения потока.

 * В конце оно печатает результаты профилирования.

 */

int main(){

  pthread_t thread_id;

 

  /*

   * Инициализируем eProf. Это должно быть сделано во время

   * запуска программы.

   */

  eprof_init();

  /* Создаём поток, который запускает функцию func_1 */

  pthread_create(&thread_id, NULL, func_1, NULL);

  /* Запускаем функцию func_2 */

  func_2();

  /* Ждём завершения потока */

  pthread_join(thread_id, NULL);

  /* Печатаем результаты */

  eprof_print();

  return 0;

}

 

Предыдущая  Содержание  Следующая