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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2010, 14:23   #1
OffyGhost
Пользователь
 
Аватар для OffyGhost
 
Регистрация: 09.03.2010
Сообщений: 12
По умолчанию С++, GetThreadTimes, Измерение времени выполнения потока

Не могу измерить время выполнения, так как он выполняется слишком быстро и в принтф выводит просто 0
хотелось бы, чтобы он выводил хоть какие нибудь наносекунды! Помогите пожалуйста

Код:
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <locale.h>
 
int l, m, n, geo, sum;
 
_int64 FileTimeToQuadWord(PFILETIME pft)
{
	return(Int64ShllMod32(pft->dwHighDateTime, 32) | pft->dwLowDateTime);
}
 
DWORD WINAPI proizv (PVOID Parametr)
{
	geo=1;
	for (int i=l; i<=m; i++)
	geo*=i;
	return 0;
}
 
DWORD WINAPI summa (PVOID Parametr)
{
	sum = (n+1)*(l+m)/2;
	return 0;
}
 
int main()
{
  setlocale(LC_ALL, "Russian");
  do {
    printf( "Введите нижнюю границу диапазона(натуральное число): " );
    scanf_s("%d", & l );
    printf( "Введите верхнюю границу диапазона(натуральное число): " );
    scanf_s("%d", & m );
    if (l>m)
    {
      printf( "\nВводите нормальные числа!\n\n" );
    }
  } while (m<l);
 
  n = m-l+1;
 
  FILETIME ftKernelTimeEnd; 
  FILETIME ftUserTimeEnd; 
  FILETIME ftDummy;
 
  _int64 qwKernelTimeElapsed, qwUserTimeElapsed, qwTotalTimeElapsed;
 
  DWORD idThread;
  HANDLE h1, h2;
  h1 = CreateThread (NULL, NULL, proizv, &geo, NULL, &idThread);
  h2 = CreateThread (NULL, NULL, summa, &sum, NULL, &idThread);
  SetThreadPriority(h1, THREAD_PRIORITY_HIGHEST);
  SetThreadPriority(h2, THREAD_PRIORITY_IDLE);
 
  GetThreadTimes(h2, &ftDummy, &ftDummy,
    &ftKernelTimeEnd, &ftUserTimeEnd);
 
  qwKernelTimeElapsed = FileTimeToQuadWord(&ftKernelTimeEnd);
 
  qwUserTimeElapsed = FileTimeToQuadWord(&ftUserTimeEnd);
 
  qwTotalTimeElapsed = qwKernelTimeElapsed + qwUserTimeElapsed;
 
  printf("\nЧисло членов: %i", n);
  WaitForSingleObject(h1, INFINITE);
  printf("\n\nПроизведение последовательности: %i", geo);
  WaitForSingleObject(h2, INFINITE);
  printf(" \nСумма последовательности %i", sum);
  printf("\n\nВремя выполнение первого потока: %lld", qwTotalTimeElapsed);
 
  CloseHandle(h1);
  CloseHandle(h2);
  getchar();
  getchar();
  return 0;
}
OffyGhost вне форума Ответить с цитированием
Старый 13.03.2010, 15:52   #2
OffyGhost
Пользователь
 
Аватар для OffyGhost
 
Регистрация: 09.03.2010
Сообщений: 12
По умолчанию

Код:
#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <locale.h>
 
int l, m, n, sum;
float geo;
 
_int64 FileTimeToQuadWord(PFILETIME pft)
{
  return(Int64ShllMod32(pft->dwHighDateTime, 32) | pft->dwLowDateTime);
}
 
DWORD WINAPI proizv (PVOID Parametr)
{
  geo=1;
  for (int i=l; i<=m; i++)
    geo*=i;
  return 0;
}
 
DWORD WINAPI summa (PVOID Parametr)
{
  sum = (n+1)*(l+m)/2;
  return 0;
}
 
int main()
{
  setlocale(LC_ALL, "Russian");
  do {
    printf( "Введите нижнюю границу диапазона(натуральное число): " );
    scanf_s("%d", & l );
    printf( "Введите верхнюю границу диапазона(натуральное число): " );
    scanf_s("%d", & m );
    if (l>m)
    {
      printf( "\nВводите нормальные числа!\n\n" );
    }
  } while (m<l);
 
  n = m-l+1;
 
  FILETIME ftKernelTimeEnd; 
  FILETIME ftUserTimeEnd; 
  FILETIME ftDummy;
 
  _int64 qwKernelTimeElapsed, qwUserTimeElapsed, qwTotalTimeElapsed;
 
  DWORD idThread;
  HANDLE h1, h2;
  h1 = CreateThread (NULL, NULL, proizv, &geo, NULL, &idThread);
  h2 = CreateThread (NULL, NULL, summa, &sum, NULL, &idThread);
  SetThreadPriority(h1, THREAD_PRIORITY_HIGHEST);
  SetThreadPriority(h2, THREAD_PRIORITY_IDLE);
 
  printf("\nЧисло членов: %i", n);
  WaitForSingleObject(h1, INFINITE);
 
  GetThreadTimes(h1, &ftDummy, &ftDummy,
    &ftKernelTimeEnd, &ftUserTimeEnd);
 
  qwKernelTimeElapsed = FileTimeToQuadWord(&ftKernelTimeEnd);
 
  qwUserTimeElapsed = FileTimeToQuadWord(&ftUserTimeEnd);
 
  qwTotalTimeElapsed = qwKernelTimeElapsed + qwUserTimeElapsed;
 
  printf("\n\nПроизведение последовательности: %f", geo);
  WaitForSingleObject(h2, INFINITE);
  printf(" \nСумма последовательности %i", sum);
  printf("\n\nВремя выполнение первого потока: %lld", qwTotalTimeElapsed);
 
  CloseHandle(h1);
  CloseHandle(h2);
  getchar();
  getchar();
  return 0;
}
Всем спасибо за прочтение, вот рабочий вариант :Р
OffyGhost вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Профилирование (Измерение времени работы программы) megakatapuz Общие вопросы C/C++ 0 06.01.2010 23:04
Измерение времени выполнения цикла Alexcomeback Общие вопросы C/C++ 10 25.04.2009 16:58
Измерение времени нажатия клавиши клавиатуры buka_14 Помощь студентам 6 13.04.2009 13:18
Измерение времени в c# byte916 Помощь студентам 4 06.03.2009 21:18
Как отследить завершение выполнения потока TThread? Трик Общие вопросы Delphi 3 24.10.2007 14:55