Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
st_kastiel
0 / 0 / 0
Регистрация: 16.04.2010
Сообщений: 14
#1

Потоки и приоритеты - C++

16.04.2010, 19:58. Просмотров 1202. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2010, 19:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Потоки и приоритеты (C++):

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

Стек и приоритеты - C++
Ошибок при компиляции не возникает, но при проверке не выдает адресов элементов и их данных. Прошу прояснить недочеты и логические ошибки в...

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

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

Приоритеты вложенных циклов - C++
Nk=20; for(Ni=0;Ni&lt;Nk;Ni++) { for(i=0;i&lt;size;i++) { for(j=0;j&lt;size;j++) { if(Map==Ni) {

Приоритеты выполнения перегрузок операций - C++
Всем привет. Скажите как себя будет вести программа в следующей ситуации и чем это обусловлено(компилятором или стандартом языка); ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2010, 19:58
Привет! Вот еще темы с ответами:

Расставить приоритеты операций и вычислить значение заданного выражения (Помогите с задачей) - C++
Расставить приоритеты операций и вычислить значение заданного выражения, используя форматы машинного представления данных и правила...

Создание и завершение процессов и потоков. Приоритеты выполнения потоков - C++
Здравствуйте. Буду очень раз если поможете понять,что конкретно нужно сделать в вот этом задании,пока особого представления о...

Приоритеты операций - C++
Доброго времени суток! Я недавно начал изучать С++. Читаю книгу &quot;Липпман. С++ для начинающих&quot;. И в ней на странице 178 есть таблица с...

Приоритеты потоков - C++
Здравствуйте, пишу две программы, в одной из которых обработка данных просто делится на потоки, а в другой я ещё придаю потокам более...


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

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

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