Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 56

Обнуление времени подсчёта выполнения кода

27.12.2019, 09:22. Показов 3643. Ответов 33

Студворк — интернет-сервис помощи студентам
Есть DLL, которая подсчитывает время выполнения exe файла.
Как сделать, чтобы он начинал с 0 считать после каждого запуска exe файла?
Если после первого запуска exe, он не останавливается и продолжает накапливать время.
Обнуляется только после полного закрытия программы.

Код DLL:
#define _CRT_SECURE_NO_WARNINGS 1 //Для совместимости с классическими функциями
#include "DLL.h" //Подключение библиотек
#include <iostream>
#include <time.h>
#include <string>
#include <windows.h>
#include <stdio.h>


#if _MSC_VER >= 1200 //Оценка целочисленности литерал
#pragma comment(lib,"winmm.lib") //Подключение библиотеки winmm.lib
#endif

using namespace std;

DOUBLE appSeconds() //Внутренняя процедура для отслеживания времени
{
static DWORD i = timeGetTime(); //Извлечение системного времени в милисекундах
static DOUBLE c = 0.0; //Инициализация переменной типа double
DWORD t = timeGetTime();
c += (t - i)*(1. / 1000.); //Подсчёт времени
i = t; //Присвоение переменной
return c;
}
LPCTSTR TimeCalc(int nTotal) //Подсчёт времени и перевод в секунды
{
static TCHAR r[100] = { 0 }; //Инициализация списка
int m = nTotal / 60; //Инициализация переменной минусы
int s = nTotal % 60; //Инициализация переменной секунды
int h = m / 60; //Инициализация переменной часы
m = m % 60;
if (!h) {
if (!m) wsprintf(r, TEXT("%02d"), s); //Перевод из int в tchar
else wsprintf(r, TEXT("%02d:%02d"), m, s);
}
else wsprintf(r, TEXT("%2d:%02d:%02d"), h, m, s);
return r;
}
extern "C" __declspec(dllexport) double StartTimer() //Начальная точка отсчёта времени
{
DOUBLE StartTime = 0.0;
StartTime = appSeconds(); //Инициализация начальной точки времени
return StartTime;
}


extern "C" __declspec(dllexport) void AllTime(double StartTime) //Конечная точка отсчёта времени и вывод данных
{
DOUBLE EndTime = 0.0; //Инициализация переменной и присвоение 0.0
EndTime = appSeconds() - StartTime; //Инициализация конечной точки времени и получение затрачего времени
char buf[100] = ""; //Инициализация строки
sprintf_s(buf, "Result: %.4f", EndTime); //Перевод из double в char
MessageBox(NULL, buf, "Time", //Вывод затраченного времени в MessageBox
MB_OK | MB_ICONINFORMATION | MB_SETFOREGROUND | MB_SYSTEMMODAL);
if (EndTime < 1)
{
MessageBox(NULL, "Too perfect to be true!", "Assessment", MB_OK);
}
else if (EndTime >= 1 && EndTime < 15)
{
MessageBox(NULL, "Good!", "Assessment", MB_OK);
}
else if (EndTime >= 15 && EndTime < 30)
{
MessageBox(NULL, "Not so bad", "Assessment", MB_OK);
}
else if (EndTime >= 30 && EndTime < 45)
{
MessageBox(NULL, "Worse", "Assessment", MB_OK);
}
else if (EndTime >= 45)
{
MessageBox(NULL, "Horrible", "Assessment", MB_OK);
}
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.12.2019, 09:22
Ответы с готовыми решениями:

Оптимизация кода. Замер времени выполнения части кода.
Доброе утро. Есть желание посмотреть сколько времени занимает выполнение какого-то блока кода/отдельной функции или процедуры/программы...

Счетчик времени выполнения кода
Усердно читал на форуме темы по таймеру. Но так и не смог реализовать счетчик. А счетчик нужен такой: По нажатию кнопки на форме, ...

Уменьшение времени выполнения кода
//Помогите ускорить код #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; using namespace std; int...

33
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 56
27.12.2019, 16:16  [ТС]
Студворк — интернет-сервис помощи студентам
Ругается на строку AllTime(tm); //Вызов экспортируемой функции (конец отсчёта, вывод значений)oleg-m1973,

Добавлено через 3 минуты
Сама программа:
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
// Win32Project1.cpp: определяет точку входа для приложения.
//
 
#include "stdafx.h"                             //Подключение библиотек
#include "Win32Project1.h"
#include <stdio.h>
#include <conio.h>
#include <Shellapi.h>
#include <Windows.h>
 
#define MAX_LOADSTRING 100
 
using namespace std;
// Глобальные переменные:
HINSTANCE hInst;                                // текущий экземпляр
TCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
TCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
typedef double (WINAPI *cfunc)();               //Определение тип "указателя на функцию"
cfunc StartTimer;                               //Переменные для функции
cfunc AllTime;
HWND hEdit;                                     //Переменная для получения значения из Edit
char text[] = { 0 };                            //Переменная для получения значения из hEdit
 
 
// Отправить объявления функций, включенных в этот модуль кода:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    DLL(HWND, UINT, WPARAM, LPARAM);
 
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
                     _In_opt_ HINSTANCE hPrevInstance,
                     _In_ LPTSTR    lpCmdLine,
                     _In_ int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
 
    // TODO: разместите код здесь.
    MSG msg;
    HACCEL hAccelTable;
 
    // Инициализация глобальных строк
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_WIN32PROJECT1, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
 
    // Выполнить инициализацию приложения:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }
 
    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT1));
 
    // Цикл основного сообщения:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
 
    return (int) msg.wParam;
}
 
 
 
//
//  ФУНКЦИЯ: MyRegisterClass()
//
//  НАЗНАЧЕНИЕ: регистрирует класс окна.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
 
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WIN32PROJECT1));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_WIN32PROJECT1);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
    return RegisterClassEx(&wcex);
}
 
//
//   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
//
//   НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
//
//   КОММЕНТАРИИ:
//
//        В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
//        создается и выводится на экран главное окно программы.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
 
   hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
 
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 
   if (!hWnd)
   {
      return FALSE;
   }
 
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
 
   return TRUE;
}
 
//
//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
//
//  WM_COMMAND  - обработка меню приложения
//  WM_PAINT    -Закрасить главное окно
//  WM_DESTROY   - ввести сообщение о выходе и вернуться.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
 
    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Разобрать выбор в меню:
        switch (wmId)
        {
        case ID_32771:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, DLL);      //Инициализация окна DLL
            break;
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: добавьте любой код отрисовки...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
 
// Обработчик сообщений для окна "О программе".
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;
 
    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}
 
//Обработки по нажатию "DLL"
INT_PTR CALLBACK DLL(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;
    case WM_COMMAND:
        HINSTANCE hLib = LoadLibrary("DLL.DLL");                            //Загрузка библиотеки DLL
        switch (LOWORD(wParam))
        {
        case IDCANCEL:                                      //Нажатие на кнопку "Отмена"
            FreeLibrary((HMODULE)hLib);                                 //Освобождение библиотеки
            EndDialog(hDlg, 0);                                     //Закрытие окна DLL
            return FALSE;
        case IDOK:
            if (hLib != NULL){                                      //Проверка загружена ли библиотека
                StartTimer = (cfunc)GetProcAddress((HMODULE)hLib, "StartTimer");//Ищем в таблице экспорта DLL нужная функцию
                AllTime = (cfunc)GetProcAddress((HMODULE)hLib, "AllTime");
                hEdit = GetDlgItem(hDlg, IDC_EDIT2);                            //Получаем значение с EDIT
                GetWindowText(hEdit, text, 255);                        //Получаем значение из hEdit
                STARTUPINFO info;                                           //Структура
                ZeroMemory(&info, sizeof(info));                            //Обнуление
                info.cb = sizeof(info);                 //Указание размера
                PROCESS_INFORMATION processInfo;
                do {
                    if (CreateProcess(NULL, text, NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))    //Создание процесса и запуск exe файла
                    {
                        const DWORD tm = StartTimer();                                                  //Вызов экспортируемой функции (начало отсчёта)
                        WaitForSingleObject(processInfo.hProcess, INFINITE);            //Ожидание завершения процесса
                        CloseHandle(processInfo.hProcess);      //Закрытие дискрептора процесса
                        CloseHandle(processInfo.hThread);               //Закрытие дискрептора потока
                        AllTime(tm);        //Вызов экспортируемой функции (конец отсчёта, вывод значений)
                    }
                } while (text == "");
                //FreeLibrary((HMODULE)hLib);                   //Освобождение библиотеки
                //EndDialog(hDlg, 0);                   //Закрытие окна DLL
            }
            else{
                MessageBox(NULL, "Dll not found!", "DLL", MB_OK);           //Вывод предупреждения
                //EndDialog(hDlg, 0);                       //Закрытие окна DLL
            }
 
            return FALSE;
        }
    }
    return (INT_PTR)FALSE;
}
Вот DLL:
DLL.cpp
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
#define _CRT_SECURE_NO_WARNINGS 1                               //Для совместимости с классическими функциями
#include "DLL.h"                                                //Подключение библиотек
#include <iostream>
#include <time.h>
#include <string>
#include <windows.h>
#include <stdio.h>
 
 
#if _MSC_VER >= 1200                                            //Оценка целочисленности литерал
#pragma comment(lib,"winmm.lib")                                //Подключение библиотеки winmm.lib
#endif
static DWORD i;
static DOUBLE c;
static TCHAR r[100];
using namespace std;                        
extern "C" __declspec(dllexport) DWORD StartTimer()         //Начальная точка отсчёта времени
{
    return ::GetTickCount();
}
 
 
extern "C" __declspec(dllexport) void AllTime(DWORD StartTime)  //Конечная точка отсчёта времени и вывод данных
{   
    char buf[100] = "";                                 //Инициализация строки
    const auto EndTime = ::GetTickCount() - StartTime;
    sprintf_s(buf, "Result: %u ms", (double)EndTime/1000.0);            //Перевод из double в char
    MessageBox(NULL, buf, "Time",                           //Вывод затраченного времени в MessageBox
        MB_OK | MB_ICONINFORMATION | MB_SETFOREGROUND | MB_SYSTEMMODAL);
Dll.h
C++
1
2
3
4
5
6
7
8
9
10
#ifndef _DLL_                                                       //Инициализация 
#define _DLL_
 
#include <iostream>                                                 //Подключение библиотек
#include <stdio.h>
#include <windows.h>
 
extern "C" __declspec(dllexport) void AllTime(DWORD StartTime); //Экспортируемые процедуры
extern "C" __declspec(dllexport) DWORD StartTimer();
#endif
Вся программа
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.12.2019, 16:16
Цитата Сообщение от ARTFIRE Посмотреть сообщение
Ругается на строку AllTime(tm); //Вызов экспортируемой функции (конец отсчёта, вывод значений)oleg-m1973,
Покажи, как у тебя объявлены переменные StartTimer и AllTime, которые
StartTimer = (cfunc)GetProcAddress((HMODULE)hLib, "StartTimer");//Ищем в таблице экспорта DLL нужная функцию
AllTime = (cfunc)GetProcAddress((HMODULE)hLib, "AllTime");
0
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 56
27.12.2019, 16:18  [ТС]
oleg-m1973,
cfunc StartTimer; //Переменные для функции
cfunc AllTime;
Вот так
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.12.2019, 16:21
Цитата Сообщение от ARTFIRE Посмотреть сообщение
cfunc StartTimer; //Переменные для функции
C++
1
2
3
4
5
extern "C" void AllTimeFunc(DWORD StartTime); //Экспортируемые процедуры
extern "C" DWORD StartTimerFunc();
 
decltype(StartTimerFunc) *StartTimer;                               //Переменные для функции
decltype(AllTimeFunc) *AllTime;
Добавлено через 10 секунд
C++
1
2
    StartTimer = (decltype(StartTimerFunc) *)GetProcAddress((HMODULE)hLib, "StartTimer");//Ищем в таблице экспорта DLL нужная функцию
    AllTime = (decltype(AllTimeFunc) *)GetProcAddress((HMODULE)hLib, "AllTime");
0
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 56
27.12.2019, 16:40  [ТС]
oleg-m1973, Пишет, что не может определить
C++
1
2
decltype(StartTimerFunc) *StartTimer;            //Переменные для функции
decltype(AllTimeFunc) *AllTime;
DLL я переписал
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.12.2019, 16:42
Лучший ответ Сообщение было отмечено ARTFIRE как решение

Решение

Цитата Сообщение от ARTFIRE Посмотреть сообщение
oleg-m1973, Пишет, что не может определить
C++
1
2
3
4
5
6
7
8
typedef void (* AllTimeFunc)(DWORD StartTime); //Экспортируемые процедуры
typedef DWORD (* StartTimerFunc)();
 
StartTimerFunc StartTimer;                               //Переменные для функции
AllTimeFunc AllTime;
.......................
StartTimer = (StartTimerFunc)GetProcAddress((HMODULE)hLib, "StartTimer");//Ищем в таблице экспорта DLL нужная функцию
AllTime = (AllTimeFunc)GetProcAddress((HMODULE)hLib, "AllTime");
Добавлено через 14 секунд
Цитата Сообщение от ARTFIRE Посмотреть сообщение
DLL я переписал
В смысле?
1
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 56
27.12.2019, 16:52  [ТС]
oleg-m1973,
Это я туплю про DLL ,сори
Ошибка вылетает критическая
Миниатюры
Обнуление времени подсчёта выполнения кода  
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.12.2019, 16:54
Цитата Сообщение от ARTFIRE Посмотреть сообщение
Это я туплю про DLL ,сори
Ошибка вылетает критическая
Функцию не нашла в dll, с именем StartTimer. Она там экспортируется?
0
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 56
27.12.2019, 16:57  [ТС]
Да
Вот
DLL.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
extern "C" __declspec(dllexport)  DWORD StartTimer()            //Начальная точка отсчёта времени
{
    return ::GetTickCount();
}
 
 
extern "C" __declspec(dllexport)  void AllTime(DWORD StartTime) //Конечная точка отсчёта времени и вывод данных
{   
    char buf[100] = "";                                 //Инициализация строки
    const auto EndTime = ::GetTickCount() - StartTime;
    sprintf_s(buf, "Result: %u ms", (double)EndTime/1000.0);            //Перевод из double в char
    MessageBox(NULL, buf, "Time",                           //Вывод затраченного времени в MessageBox
        MB_OK | MB_ICONINFORMATION | MB_SETFOREGROUND | MB_SYSTEMMODAL);
И
DLL.h
C++
1
2
3
4
5
6
7
8
9
10
#ifndef _DLL_                                                       //Инициализация 
#define _DLL_
 
#include <iostream>                                                 //Подключение библиотек
#include <stdio.h>
#include <windows.h>
 
extern "C" __declspec(dllexport) void AllTime(DWORD StartTime); //Экспортируемые процедуры
extern "C" __declspec(dllexport) DWORD StartTimer();
#endif
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.12.2019, 17:12
Цитата Сообщение от ARTFIRE Посмотреть сообщение
Да
Вот
DLL.cpp
Посмотри свою дллку при помощи http://www.dependencywalker.com/
Там видно, какие функции экспортируется.
А сначала проверь, что она вообще загружается - hLib != NULL
0
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 56
27.12.2019, 17:19  [ТС]
oleg-m1973,
Это и проверяется
если её нету, она ругнёться

Добавлено через 4 минуты
Нашёл проблему
Программа запускается.

Добавлено через 24 секунды
Но все ровно выводит те же значения, что и были.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.12.2019, 17:20
Цитата Сообщение от ARTFIRE Посмотреть сообщение
sprintf_s(buf, "Result: %u ms", (double)EndTime/1000.0);            //Перевод из double в char
sprintf_s(buf, "Result: %f ms",
0
0 / 0 / 0
Регистрация: 13.06.2017
Сообщений: 56
27.12.2019, 17:26  [ТС]
Да, помогло
Выводит верно
Спасибо большое)
Но проблема в другом
Переменную EndTime, теперь всегда отображает "Horrible" > 45 сек
Как можно подправить?
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
    char buf[100] = "";                                 //Инициализация строки
    const auto EndTime = ::GetTickCount() - StartTime;
    sprintf_s(buf, "Result: %f s", (double)EndTime/1000.0);         //Перевод из double в char
    MessageBox(NULL, buf, "Time",                           //Вывод затраченного времени в MessageBox
        MB_OK | MB_ICONINFORMATION | MB_SETFOREGROUND | MB_SYSTEMMODAL);
    if (EndTime < 1)
    {
        MessageBox(NULL, "Too perfect to be true!", "Assessment", MB_OK);
    }
    else if (EndTime >= 1 && EndTime < 15)
    {
        MessageBox(NULL, "Good!", "Assessment", MB_OK);
    }
    else if (EndTime >= 15 && EndTime < 30)
    {
        MessageBox(NULL, "Not so bad", "Assessment", MB_OK);
    }
    else if (EndTime >= 30 && EndTime < 45)
    {
        MessageBox(NULL, "Worse", "Assessment", MB_OK);
    }
    else if (EndTime >= 45)
    {
        MessageBox(NULL, "Horrible", "Assessment", MB_OK);
    }
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
27.12.2019, 17:28
Цитата Сообщение от ARTFIRE Посмотреть сообщение
Переменную EndTime, теперь всегда отображает "Horrible" > 45 сек
Как можно подправить?
C++
1
2
    const double EndTime = double(::GetTickCount() - StartTime) / 1000.0;
    sprintf_s(buf, "Result: %f s", EndTime);         //Перевод из double в char
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.12.2019, 17:28

Измерение времени выполнения кода
кто-нибудь может объяснить почему это не работает? using System; using System.Collections.Generic; using System.Linq; using...

Подсчёт времени выполнения кода
Используя функцию QueryPerformanceCounter, написать приложение, которое будет подсчитывать время выполнения кода в MASM32 Участок...

Определение времени выполнения кода
Нужно определить сколько выполняется тот или иной цикл, подскажите поз, как это сделать

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

Замер времени выполнения программного кода
Как замерить время выполнения этого программного кода (в секундах) и вывести его на экран? Как провести оптимизацию, чтобы время...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru