Привет всем кто увидит это сообщение))) вот мое задание и код программы, если увидите что то не правильно подскажите пожалуйста=) так вот у меня такой вопрос... как подсчитать время выполнение потока))) скажите пожалуйста, а то целый день не могу разобраться(((
задание.
Разработать программу для вычисления полного количества секунд, прошедших между двумя значениями времени. Значение времени – это строки вида ЦЦ.ЦЦ.ЦЦ, где Ц – это любая цифра из диапазона [0-9]. Вычисление разницы между временами оформляется как функция потока. Сначала осуществляется ввод значений времени, затем запускается поток, и далее – результат выводится на экран. Запустить программу два раза: первый раз с приоритетом потока THREAD_PRIORITY_NORMAL, второй – THREAD_PRIORITY_LOWEST, и вывести на экран значения времени работы потока.
код
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
| #include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <iostream>
#include <conio.h>
using namespace std;
int h,m,s,h1,m1,s1, sum1,sum2,rez;
DWORD WINAPI fpot(LPVOID iNum)
{
rez=sum2-sum1;
return rez;
}
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian");
HANDLE hThread;
DWORD IDThread;
cout<<"Введите первое значение времени ЧЧ:ММ:СС\n";
point:
cin>>h>>m>>s;
if ( ((m||s)>60) || ((m||s)<0) || (h>24) || (h<0) )
{
cout<<"Некорректное значение времени, введите корректно\n";
goto point;
}
sum1=(s+(h*3600)+(m*60));
cout<<"Первое значение времени в секундах:"<<sum1<<"\n\n";
cout<<"Введите второе значение времени ЧЧ:ММ:СС\n";
point2:
cin>>h1>>m1>>s1;
if ( ((m1||s1)>60) || ((m1||s1)<0) || (h1>24) || (h1<0) )
{
cout<<"Некорректное значение времени, введите корректно\n";
goto point2;
}
sum2=(s1+(h1*3600)+(m1*60));
cout<<"Второе значение времени в секундах: "<<sum2<<"\n\n";
hThread = ::CreateThread(NULL, 0, fpot, 0, CREATE_SUSPENDED, &IDThread);
if( hThread == NULL)
return GetLastError();
else cout<<"Поток создан\n";
// созданному потоку устанавливается приоритет HIGHEST
::SetThreadPriority(hThread // дескриптор первого потока
, THREAD_PRIORITY_NORMAL // уровень приоритета
);
// выполнение потока в данном случае вызовом функции возобновления
::ResumeThread(hThread);
cout<<"Поток запущен с приоритетом: THREAD_PRIORITY_NORMAL \n\n";
cout<<"Тaблицa 1 Стaндaртные знaчения приoритетa пoтoкa числoвoе знaчение\n\n";
cout<<" THREAD_PRIORITY_TT.ME_CRITT.CAL 15\n";
cout<<" THREAD_PRIORITY_HIGHEST 2\n";
cout<<" THREAD_PRIORITY_ABOVE_NORMAL 1\n";
cout<<" THREAD_PRIORITY_NORMAL 0\n";
cout<<" THREAD_PRIORITY_BELOW_NORMAL -1\n";
cout<<" THREAD_PRIORITY_LOWEST -2\n";
cout<<" THREAD_PRIORITY_IDLE -15\n\n";
cout<<"Приоритет потока равен: "<<GetThreadPriority(hThread)<<"\n\n";
//ждем пока поток fpot закончит работу
WaitForSingleObject(hThread, INFINITE);
// закрываем дискриптор потока fpot
CloseHandle(hThread);
cout<<"Разница между первым и вторым значениями времени в секундах:"<< rez<<"\n";
const int NANOSECOND_BLOCKS_IN_MILLISECOND = 10000;
FILETIME threadStart; // начало работы потока
FILETIME threadEnd; // окончание работы потока
FILETIME dummy; // неиспользуемое значение
::GetThreadTimes(hThread
, &threadStart
, &threadEnd
, &dummy
, &dummy );
// вывод значения времени работы потока в миллисекундах,
// при этом выполняются преобразования.
// Внимание! Сравниваются только нижние части структуры FILETIME
::printf("Поток выполнился за %d милисекунд.\t", (threadEnd.dwLowDateTime - threadStart.dwLowDateTime)/ NANOSECOND_BLOCKS_IN_MILLISECOND
);
getch();
return 0; |
|
вот вроде считает время... но пишет 0((( почему незнаю(((
Добавлено через 1 час 23 минуты
Ну пожалуйста хоть кто нибудь объясните как посчитать время нормально???)))