Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru