CpuHddMem
Индикатор состояния процессора, жёсткого диска, памяти в трее.
Скачать
CpuHddMem
Сообщений 1 страница 26 из 26
Поделиться119.09.2023 23:24:49
Поделиться520.09.2023 02:44:44
Webarion
Перезалил. Когда тестировал у меня как раз память была посредине. Хотя я тестил но видимо выгружая браузер но видимо сделал не правильные правки, когда для процессора датчик считал. Память то берётся свободная, а потом вычитается и остаток даёт занятую. В общем исправил. На счёт процессора я попробовал и автор по описанию выдаёт максимальное от максимального ядра, если все будут по 20% а одно ядро 80% то общее считается 80%. Но это надо исправить, надо сложить все и разделить на число процессоров. Жёсткий диск тоже непонятно что считать за 100% у меня к примеру при копировании фильма числовое значение 156, а скоростной SSD выдаст больше, в общем если скорость выше копирования фильма на шпидельном диске, то величина 100% ну то есть диск в напряге.
Можешь посмотреть инклуды, там ссылки откуда я их взял. Немного подстроил под вывод для датчика в трее. Вообще я пример взял с "AnVir Task Manager", у этой программы такой же датчик в трее, я прям смотрю оба рядом и сравниваю одинаково ли они работают. Но у меня сейчас запрос каждую секунду, а у анвира 2 секунды, позже через конфиг добавлю возможность изменять это.
Отредактировано AZJIO (20.09.2023 02:47:33)
Поделиться622.09.2023 00:03:56
Перезалил
По памяти вроде стало соответствовать.
Но индикатор проца, у меня всё равно полный. Думаю, что CPU_usage.pb по процессору, всё же выдаёт неправильные данные.
Поделиться722.09.2023 01:02:28
Webarion
Не стал объяснять, просто поделил результаты на число процессоров. Проверь, перезалил. И проверь "AnVir Task Manager" как он у тебя показывает показания в трее, совпадают или нет ("Инструменты - Настройки - Иконки и меню в трее", поставь галки в "Составная иконка").
Ещё перезалил, добавил ini-файл с настройками цвета и частотой запроса.
Ещё перезалил, другая функция определения нагруженности процессора.
Ещё перезалил, пункт автозапуска и вывод подсказки. Пока подсказка открыта в неё идёт обновление данных.
Отредактировано AZJIO (22.09.2023 09:44:00)
Поделиться822.09.2023 10:45:49
Сейчас результаты стали похожи.
Но, вот ещё один момент. После работы AnVir, скомпилированная без отладчика программа зависает, на месте иконки в трее пустое пространство. CpuHddMem остаётся в процессах, приходится завершать. С отладчиком, работает нормально.
Такое явление заметил, даже когда AnVir уже был отключен.
Отредактировано Webarion (22.09.2023 11:17:41)
Поделиться922.09.2023 10:54:21
Webarion
Вот здесь ещё тестируют, пока ни кто не жалуется на такой глюк.
Поделиться1022.09.2023 11:01:29
Программа работает, просто иконка в трее не инициализируется. IsSysTrayIcon(#TrayIcon) даёт 0. Повторный запуск, если запустить две копии сразу, вторая копия работает. Смотрю пока. Сейчас, систему перезагружу, попробую снова последовательность.
Поделиться1122.09.2023 11:15:55
На перезагруженой системе, всё норм. Но, если запустить AnVir (Portable) с правами администратора и даже если его потом закрыть, то история повторяется.
В общем, это не касается твоей программы. У меня после анвира с админом, любое добавление AddSysTrayIcon не работает, в любом коде.
Отредактировано Webarion (22.09.2023 11:42:32)
Поделиться1222.09.2023 16:16:33
Webarion
Что если это какой то датчик AnVir, который не заполнен, например сеть, а ты ничего скачиваешь и он пустой?
Поделиться1322.09.2023 16:46:26
Открыл монитор ресурсов и вижу что показания загрузки проца типа на 2 ядра скачат от проги и хоть там есть 2 разделяющих графика на 2 ядра но там в графиках скачет кривая а под ними в приписки загруженность по нулям.
Вот по диску там значения вывода типа в кило/секунду типа на сколько идёт обмен трафика а в проге типа % и так же скачет значение = это что или у диска объём меняется заполнения или также типа идёт обмен трафика ?
Открыл CPU_usage и сделал так
Import "kernel32.lib" GetSystemTimes(*lpIdleTime, *lpKernelTime, *lpUserTime) EndImport Procedure CPULoad() Static FirstRun = #True Static StartTimes_0.i,StartTimes_1.i,EndTimes_0.i,EndTimes_1.i Static CPU_Kernel.FILETIME, CPU_User.FILETIME, CPU_Idle.FILETIME Protected Idle_Time.i Protected Total_Time.i Protected CPU_Percent.f Protected Text.s GetSystemTimes(@CPU_Idle, @CPU_Kernel, @CPU_User) EndTimes_0 = (CPU_Kernel\dwLowDateTime + CPU_User\dwLowDateTime) EndTimes_1 = CPU_Idle\dwLowDateTime If FirstRun StartTimes_0= EndTimes_0 StartTimes_1= EndTimes_1 FirstRun = #False ProcedureReturn 0 EndIf Idle_Time = EndTimes_1 -StartTimes_1 If Idle_Time > 0 Total_Time = EndTimes_0 - StartTimes_0 CPU_Percent.f = ((Total_Time - Idle_Time) / Total_Time) * 100 ; Text.s = Left(StrF(CPU_Percent), FindString(StrF(CPU_Percent), ".", 1) + 1) + " %" EndIf StartTimes_0= EndTimes_0 StartTimes_1 = EndTimes_1 ProcedureReturn CPU_Percent EndProcedure ; usage example CPULoad() ; init
Так как динамическое выделение это работа через память и соответственно доп ресурсы обработки памяти и ради 4 ячеек памяти это не к чему ,а так чисто они будут скомпилены в проге дополнительно.
Поделиться1422.09.2023 17:15:55
Sergeihik
Я ещё не оптимизировал. Датчики проца плохо работали и я нагуглил, что функция NtQuerySystemInformation больше не работает (у меня работала) используйте GetSystemTimes. Я решил погуглить готовое, проверил, работает, выложил (даже ссылку забыл вставить), у тех у кого зашкаливал проц заработал и оставил как есть занявшись статистикой в подсказке и добавлением автостарта. Даже предыдущий пример проца было видно, что код не использует все возможности, например "x + y" записан как "x = x + y" и я понимал что надо переписывать.
Поделиться1522.09.2023 17:31:25
Sergeihik
Я ещё не оптимизировал. Датчики проца плохо работали и я нагуглил, что функция NtQuerySystemInformation больше не работает (у меня работала) используйте GetSystemTimes. Я решил погуглить готовое, проверил, работает, выложил (даже ссылку забыл вставить), у тех у кого зашкаливал проц заработал и оставил как есть занявшись статистикой в подсказке и добавлением автостарта. Даже предыдущий пример проца было видно, что код не использует все возможности, например "x + y" записан как "x = x + y" и я понимал что надо переписывать.
Пока не буду вникать,чуть пошёл дальше и хочется спросить из ходя из файла ForCpuHddMem про процедуру RGBtoBGR(c) ,допустим входящее значение как тут одно и как бы принято
каждый цвет распологать в одном байте от младшего с 0-бита к старшему 32(это уже альфа) и вот тут в процедуре RGBtoBGR(c) что должно произойти? ,как мне кажется тупо это значение должно быть во всех 3-х байтах а на выходе я что то не понял почему пуриковские процедуры дали значение 6553600?((дестичное) и моя 6579300(десятичное) что забиваем в виндовский калькулятор программист и смотрим биты
Procedure RGBtoBGR(c) ProcedureReturn RGB(Blue(c), Green(c), Red(c));красный зелёный синий EndProcedure ;[================================= Structure cvet r.a g.a b.a EndStructure Structure rgb;a StructureUnion cvet.cvet rgb.i EndStructureUnion EndStructure Procedure RGBtoBGR2(c) Protected rgb.rgb rgb\cvet\r=c rgb\cvet\g=c rgb\cvet\b=c ProcedureReturn rgb\rgb EndProcedure Debug RGBtoBGR(100) Debug RGBtoBGR2(100)
Это что и почему так?
PS: А дальше как понимаю эта типа процедура в одном лице единожды...и зачем тогда это делать когда можно или типа макрос или подобие примера выше?такую я бы лично обезличил(вредительницу).....
pps:в офтоп надо бы запостить(перенисти туда бы надо) https://www.youtube.com/watch?v=QgzBDZwanWA
переплюнем в улучшении?
пока так попробывал
h.q=1000 r.q=1000 s.q max_kolihestvociklov.q cikl: ;Debug r s+1 If (r & 1)=0;чётное r/2 Goto cikl Else;не чётное If r=1 ;Debug "--------" ;Debug s-1 s-1 ;Debug "========" If max_kolihestvociklov<s ;Debug Str(s)+">" ;Debug ";;;;;;;" max_kolihestvociklov=s EndIf If h=1000000 Goto vyhod EndIf s=0 h+1 r=h Goto cikl EndIf r*3 r+1 Goto cikl EndIf vyhod: Debug h Debug max_kolihestvociklov
Ppps:дождитесь результат и возможно сделайте код по отсчёту времени....
И так можно на энное время загрузить проц.
Отредактировано Sergeihik (22.09.2023 18:57:23)
Поделиться1622.09.2023 18:31:32
Sergeihik
Хотел за оф.форуме задать вопрос по этому поводу. Допустим мы используем макрос и код в макросе помещается в точку вызова. Но одна из сутей процедуры/функции - экономить код, то есть вместо вызова функции из 5-ти мест мы вставляем код функции в эти 5 мест с помощью макроса. В каком то смысле это не рационально. В другой программе у меня из конфига загружается 2 десятки цветов и их надо преобразовать из RGB (привычные веб-цвета) в BGR (цвет в гаджетах или кистях) и вместо 20 раз вставки кода с помощью раскрытия макросов я вызываю функцию. В одном случае увеличивается код, в другом скорость, но насколько одно перевешивает другое? Если бы это была вещь в калбаке и обрабатывалась 100-1000 раз в секунду то я бы возможно сунул бы раскрытый код, а если это разовый запрос на старте проги, то пусть как есть.
Делай вывод в Hex
Debug Hex(RGBtoBGR(100)) Debug Hex(RGBtoBGR2(100))
тогда понятней:
640000
646464
как видишь в одном случае ты указываешь цвет 100, в другом ты в каждый элемент цвета суёшь 100.
Debug Hex(100)
функции Blue(c), Green(c), Red(c) каждая берёт цвет из своей позиции, а 100 это число грубо говоря справа, а слева всё по нолям. Вот и получил то что получил.
kolihestvociklov = CountLoop = LoopCount
Отредактировано AZJIO (22.09.2023 18:48:11)
Поделиться1722.09.2023 19:21:28
Подумаю
Sergeihik
Хотел за оф.форуме задать вопрос по этому поводу. Допустим мы используем макрос и код в макросе помещается в точку вызова. Но одна из сутей процедуры/функции - экономить код, то есть вместо вызова функции из 5-ти мест мы вставляем код функции в эти 5 мест с помощью макроса. В каком то смысле это не рационально. В другой программе у меня из конфига загружается 2 десятки цветов и их надо преобразовать из RGB (привычные веб-цвета) в BGR (цвет в гаджетах или кистях) и вместо 20 раз вставки кода с помощью раскрытия макросов я вызываю функцию. В одном случае увеличивается код, в другом скорость, но насколько одно перевешивает другое? Если бы это была вещь в калбаке и обрабатывалась 100-1000 раз в секунду то я бы возможно сунул бы раскрытый код, а если это разовый запрос на старте проги, то пусть как есть.Делай вывод в Hex
тогда понятней:
640000
6464
64
Опять лезет мысль,что это как видишь в одном случае ты указываешь цвет 100, в другом ты в каждый элемент цвета суёшь 100.функции Blue(c), Green(c), Red(c) каждая берёт цвет из своей позиции, а 100 это число грубо говоря справа, а слева всё по нолям. Вот и получил то что получил.
kolihestvociklov = CountLoop = LoopCount
Отредактировано AZJIO (Сегодня 18:48:11)
Допустим позиция,а с чего она начинается с какого цвета(байта числа) и как так может получится тогда что на выходе в этих байтах по нулю? типа позиции совпали?давай вместо 100 другой код запустим и посмотрим...
насчёт оптимизации надо подумать ,чуть позже напишу сейчас некогда пока
Поделиться1822.09.2023 19:36:06
Sergeihik
пример из справки
Structure RGBA StructureUnion color.l byte.a[4] EndStructureUnion EndStructure col.RGBA col\color = RGBA(255, 200, 150, 100) Debug "Красный: " + col\byte[0] Debug "Зелёный: " + col\byte[1] Debug "Синий: " + col\byte[2] Debug "Прозрачность: " + col\byte[3]
Поделиться1922.09.2023 21:19:32
Ну и хитёр,а в коде то этом есть намёк на функцию Rgba?и тем более с предЪявленной структурой?,забыл речь о чём в обсуждении?
Ps :нечего что мы выложенный код рецензируем?
Отредактировано Sergeihik (22.09.2023 21:21:12)
Поделиться2023.09.2023 18:10:58
Это я предыдущий пост без обид ,я вот что подумал прописываем в ini файле цвет но насколько это удобно чтобы юзер туда прописывал и дополнительно тратил время на изучение?
И думая сразу кажется или доп утилита должна быть работы над ини или сразу из программы выбрать цвет понятный визуально и сделать это по пару щелчков.
Поделиться2123.09.2023 20:21:47
Webarion
Что если это какой то датчик AnVir, который не заполнен, например сеть, а ты ничего скачиваешь и он пустой?
Нет, я отключаю AnVir. Эта программа(анвир), что-то делает у меня в системе, что даже после её удаления, AddSysTrayIcon остаётся сломан.
В другой системе такого не заметил. Даже интересно стало почему. Как-нибудь разберусь.
Отредактировано Webarion (23.09.2023 20:22:17)
Поделиться2224.09.2023 14:24:59
Обновления
1.4.0 от 24.09.23
Закрытие подсказки кликом на иконке, а не только крестиком в заголовке подсказки.
Обновление координат после закрытия подсказки, если иконка перемещена в трее.
Округление до 100% в подсказке.
Добавлен пункт меню "Справка".
Поделиться2325.09.2023 19:16:35
1. Меню в трее выглядит замыленным. Высокое Dpi не поддерживает, что ли?
2. Размер программы: 138 килобайт. Не многовато ли для программы, которая только значок в трее показывает?
Поделиться2425.09.2023 20:32:06
1. Меню в трее выглядит замыленным. Высокое Dpi не поддерживает, что ли?
Перезалил с DPI. Обычно у меня всегда включено, упустил.
2. Размер программы: 138 килобайт. Не многовато ли для программы, которая только значок в трее показывает?
За этим я пристально слежу, ну ни как не получается, добавляшь ini-файл, тут же 5-10 кб добавляется, потом подсказку, ещё добавляется. Делал без жесткого диска а потом с жёстким целый инклуд, опять 10 кб и вот так по чуть чуть набирается. Хочешь уменьшить вырезай назад, выпиливай подсказку. Собственно я её не сильно хотел, попросили, типа по запросу в процентах в числах показать. Но там ведь числа это абстрактное понятие - нелинейное значение, невозможно проц и жёсткий выразить в процентах, у каждого своё восприятие за что принимать некоторую величину, так что на этом можно было бы сэкономить. Я всегда смотрю только на иконку, чисто усреднённый показатель, чтобы увидеть что система в норме и ничто её не "досит".
там же алгоритм прост до ужаса, стандартный пример, который я выложил тут (последний в посте и предпоследний). К нему добавил рисовку иконки. Далее мне нужно было найти функционал возвращающий процент состояния и я их нагуглил и адаптировал мегабайты в проценты. Всё. Инклуды возвращают данные, я рисую иконку на основании этих данных. Ну единственное я сделал функцию рисовки иконки, так как без неё иконка появлялась пустая и через интервал 2 сек заполнялась, это выглядело некрасиво, поэтому я перенёс рисовку в функцию и вызываю её сразу, а потом по таймеру. Ну и система подсказки тоже запутывает алгоритм флагами, ими я упростил, чтобы при отсутствии подсказки не было лишних вычислений, нет окна, переключил флаг в запрет дополнительных вычислений. Мне уже посоветовали сделать не подсказку, а окно и в нём выводить данные, у меня уже есть невидимое окно. И оно бы не мерцало как подсказка.
Думал что используя родное уже существующее окно и удалив код подсказки у меня сократиться exe-файл, в итоге увеличился на 5 кб. Но зато подсказка не мерцает. Ещё перезалил с использованием родного окна.
Отредактировано AZJIO (25.09.2023 21:29:23)
Поделиться2525.09.2023 21:51:54
Размер программы: 138 килобайт. Не многовато ли для программы
Видимо не видели проги на Qt и на текущих версиях дельфи / лазарус.
100 кб это не много. Можно конечно ужать, но это затраты времени которое можно использовать для других целей.
Поделиться2625.09.2023 21:53:37
Добавил выравнивание данных по колонкам (перезалил). Обновляются только цифры, а текст справа и слева (%) статичный.
При добавлении в автозагрузку появляется диалог с возможностью удалить или перезаписать если ярлык уже существует.
Отредактировано AZJIO (25.09.2023 22:25:32)