Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 14
1

Потоки и приоритеты

16.04.2010, 19:58. Просмотров 2530. Ответов 0
Метки нет (Все метки)

Привет всем кто увидит это сообщение))) вот мое задание и код программы, если увидите что то не правильно подскажите пожалуйста=) так вот у меня такой вопрос... как подсчитать время выполнение потока))) скажите пожалуйста, а то целый день не могу разобраться(((

задание.
Разработать программу для вычисления полного количества секунд, прошедших между двумя значениями времени. Значение времени – это строки вида ЦЦ.ЦЦ.ЦЦ, где Ц – это любая цифра из диапазона [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 минуты
Ну пожалуйста хоть кто нибудь объясните как посчитать время нормально???)))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.04.2010, 19:58
Ответы с готовыми решениями:

приоритеты.
Здраствуйте. Столкнулся вот с какой проблемой. Добавляю на форму компонент &quot;Panel: TPanel&quot;....

Приоритеты
Почему не работает приоритет на загрузку с DVD диска?

Что такое потоки ввода, потоки вывода?
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода,...

Расставить приоритеты ж/д
У меня один хард, когда переустанавливал винду поделил его на 2 неравные части. &quot;С:&quot;- винда и все с...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2010, 19:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

приоритеты операций
Интересную ошибку нахожу в книгах по части приоритетов операций в C++: например здесь и здесь...

Приоритеты операций
Есть такой вот пример: Console.WriteLine(&quot;Enter please x: &quot;); int x =...

Приоритеты операций
Почему в таблице приоритета операций постфиксный инкремент(декремент) имеет приоритет 2, если...

Приоритеты операций
Здравствуйте, помогите, пожалуйста, написать приложение на c#, в котором необходимо расставить...

Приоритеты CSS
Прежде всего интересует, как правильно читать такую запись? view-tenth:hover img А проблема...

приоритеты операций
cout &lt;&lt; (5 &lt;&lt;3); что это за знак &lt;&lt; и где можно узнать приоритеты всех (или основных) операций в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.