PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » PureBasic для Windows » CpuHddMem


CpuHddMem

Сообщений 1 страница 26 из 26

1

CpuHddMem
https://i.imgur.com/tkDhH5k.png
Индикатор состояния процессора, жёсткого диска, памяти в трее.
Скачать

0

2

У меня, почему-то индикатор процессора всегда на полную, хотя в реале не так. Память и диск норм.
https://forumupload.ru/uploads/0009/ae/28/644/t333200.jpg

0

3

Webarion написал(а):

У меня, почему-то индикатор процессора всегда на полную, хотя в реале не так. Память и диск норм.

Предположу, что индикатор показывает максимальную, а не текущую загрузку.
https://forumupload.ru/uploads/0009/ae/28/644/t928288.png
P.S. на скрине не там метку поставил.

Отредактировано Webarion (20.09.2023 01:13:11)

0

4

Ещё один момент. Чем больше используется память, тем меньше индикатор. Это так задумано? Если да, то почему? Вроде, чем меньше индикатор, тем логичнее предположить, что память используется меньше.
Скрин:
https://forumupload.ru/uploads/0009/ae/28/644/t662089.png

Отредактировано Webarion (20.09.2023 01:18:31)

0

5

Webarion
Перезалил. Когда тестировал у меня как раз память была посредине. Хотя я тестил но видимо выгружая браузер но видимо сделал не правильные правки, когда для процессора датчик считал. Память то берётся свободная, а потом вычитается и остаток даёт занятую. В общем исправил. На счёт процессора я попробовал и автор по описанию выдаёт максимальное от максимального ядра, если все будут по 20% а одно ядро 80% то общее считается 80%. Но это надо исправить, надо сложить все и разделить на число процессоров. Жёсткий диск тоже непонятно что считать за 100% у меня  к примеру при копировании фильма числовое значение 156, а скоростной SSD выдаст больше, в общем если скорость выше копирования фильма на шпидельном диске, то величина 100% ну то есть диск в напряге.
Можешь посмотреть инклуды, там ссылки откуда я их взял. Немного подстроил под вывод для датчика в трее. Вообще я пример взял с "AnVir Task Manager", у этой программы такой же датчик в трее, я прям смотрю оба рядом и сравниваю одинаково ли они работают. Но у меня сейчас запрос каждую секунду, а у анвира 2 секунды, позже через конфиг добавлю возможность изменять это.

Отредактировано AZJIO (20.09.2023 02:47:33)

0

6

AZJIO написал(а):

Перезалил

По памяти вроде стало соответствовать.
Но индикатор проца, у меня всё равно полный. Думаю, что CPU_usage.pb по процессору, всё же выдаёт неправильные данные.

0

7

Webarion
Не стал объяснять, просто поделил результаты на число процессоров. Проверь, перезалил. И проверь "AnVir Task Manager" как он у тебя показывает показания в трее, совпадают или нет ("Инструменты - Настройки - Иконки и меню в трее", поставь галки в "Составная иконка").

Ещё перезалил, добавил ini-файл с настройками цвета и частотой запроса.
Ещё перезалил, другая функция определения нагруженности процессора.
Ещё перезалил, пункт автозапуска и вывод подсказки. Пока подсказка открыта в неё идёт обновление данных.

Отредактировано AZJIO (22.09.2023 09:44:00)

0

8

Сейчас результаты стали похожи.
Но, вот ещё один момент. После работы AnVir, скомпилированная без отладчика программа зависает, на месте иконки в трее пустое пространство. CpuHddMem остаётся в процессах, приходится завершать. С отладчиком, работает нормально.
Такое явление заметил, даже когда AnVir уже был отключен.

Отредактировано Webarion (22.09.2023 11:17:41)

0

9

Webarion
Вот здесь ещё тестируют, пока ни кто не жалуется на такой глюк.

0

10

Программа работает, просто иконка в трее не инициализируется. IsSysTrayIcon(#TrayIcon) даёт 0. Повторный запуск, если запустить две копии сразу, вторая копия работает. Смотрю пока. Сейчас, систему перезагружу, попробую снова последовательность.

0

11

На перезагруженой системе, всё норм. Но, если запустить AnVir (Portable) с правами администратора и даже если его потом закрыть, то история повторяется.
В общем, это не касается твоей программы. У меня после анвира с админом, любое добавление AddSysTrayIcon не работает, в любом коде.

Отредактировано Webarion (22.09.2023 11:42:32)

0

12

Webarion
Что если это какой то датчик AnVir, который не заполнен, например сеть, а ты ничего скачиваешь и он пустой?

0

13

Открыл монитор ресурсов и вижу что показания загрузки проца типа на 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 ячеек памяти это не к чему ,а так чисто они будут скомпилены в проге дополнительно.

0

14

Sergeihik
Я ещё не оптимизировал. Датчики проца плохо работали и я нагуглил, что функция NtQuerySystemInformation больше не работает (у меня работала) используйте GetSystemTimes. Я решил погуглить готовое, проверил, работает, выложил (даже ссылку забыл вставить), у тех у кого зашкаливал проц заработал и оставил как есть занявшись статистикой в подсказке и добавлением автостарта. Даже предыдущий пример проца было видно, что код не использует все возможности, например "x + y" записан как "x = x + y" и я понимал что надо переписывать.

0

15

AZJIO написал(а):

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: А дальше как понимаю эта типа процедура в одном лице единожды...и зачем тогда это делать когда можно или типа макрос или подобие примера выше?такую я бы лично обезличил(вредительницу)..... :D
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:дождитесь результат и возможно сделайте код по отсчёту времени.... :P
И так можно на энное время загрузить проц.

Отредактировано Sergeihik (22.09.2023 18:57:23)

0

16

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)

0

17

Подумаю

AZJIO написал(а):

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 другой код запустим и посмотрим...
насчёт оптимизации надо подумать ,чуть позже напишу сейчас некогда пока

0

18

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]

0

19

Ну и хитёр,а  в коде то этом есть намёк на функцию Rgba?и тем более с предЪявленной структурой?,забыл речь о чём в обсуждении?
Ps :нечего что мы выложенный код рецензируем?

Отредактировано Sergeihik (22.09.2023 21:21:12)

0

20

Это я предыдущий пост без обид ,я вот что подумал прописываем в ini файле цвет но насколько это удобно чтобы юзер туда прописывал и дополнительно тратил время на изучение?
И думая сразу кажется или доп утилита должна быть работы над ини или сразу из программы выбрать цвет понятный визуально и сделать это по пару щелчков.

0

21

AZJIO написал(а):

Webarion
Что если это какой то датчик AnVir, который не заполнен, например сеть, а ты ничего скачиваешь и он пустой?

Нет, я отключаю AnVir. Эта программа(анвир), что-то делает у меня в системе, что даже после её удаления, AddSysTrayIcon остаётся сломан.
В другой системе такого не заметил. Даже интересно стало почему. Как-нибудь разберусь.

Отредактировано Webarion (23.09.2023 20:22:17)

0

22

Обновления
1.4.0 от 24.09.23
Закрытие подсказки кликом на иконке, а не только крестиком в заголовке подсказки.
Обновление координат после закрытия подсказки, если иконка перемещена в трее.
Округление до 100% в подсказке.
Добавлен пункт меню "Справка".

0

23

1. Меню в трее выглядит замыленным. Высокое Dpi не поддерживает, что ли?
2. Размер программы: 138 килобайт. Не многовато ли для программы, которая только значок в трее показывает?

0

24

Замабувараев написал(а):

1. Меню в трее выглядит замыленным. Высокое Dpi не поддерживает, что ли?

Перезалил с DPI. Обычно у меня всегда включено, упустил.

Замабувараев написал(а):

2. Размер программы: 138 килобайт. Не многовато ли для программы, которая только значок в трее показывает?

За этим я пристально слежу, ну ни как не получается, добавляшь ini-файл, тут же 5-10 кб добавляется, потом подсказку, ещё добавляется. Делал без жесткого диска а потом с жёстким целый инклуд, опять 10 кб и вот так по чуть чуть набирается. Хочешь уменьшить вырезай назад, выпиливай подсказку. Собственно я её не сильно хотел, попросили, типа по запросу в процентах в числах показать. Но там ведь числа это абстрактное понятие - нелинейное значение, невозможно проц и жёсткий выразить в процентах, у каждого своё восприятие за что принимать некоторую величину, так что на этом можно было бы сэкономить. Я всегда смотрю только на иконку, чисто усреднённый показатель, чтобы увидеть что система в норме и ничто её не "досит".
там же алгоритм прост до ужаса, стандартный пример, который я выложил тут (последний в посте и предпоследний). К нему добавил рисовку иконки. Далее мне нужно было найти функционал возвращающий процент состояния и я их нагуглил и адаптировал мегабайты в проценты. Всё. Инклуды возвращают данные, я рисую иконку на основании этих данных. Ну единственное я сделал функцию рисовки иконки, так как без неё иконка появлялась пустая и через интервал 2 сек заполнялась, это выглядело некрасиво, поэтому я перенёс рисовку в функцию и вызываю её сразу, а потом по таймеру. Ну и система подсказки тоже запутывает алгоритм флагами, ими я упростил, чтобы при отсутствии подсказки не было лишних вычислений, нет окна, переключил флаг в запрет дополнительных вычислений. Мне уже посоветовали сделать не подсказку, а окно и в нём выводить данные, у меня уже есть невидимое окно. И оно бы не мерцало как подсказка.

Думал что используя родное уже существующее окно и удалив код подсказки у меня сократиться exe-файл, в итоге увеличился на 5 кб. Но зато подсказка не мерцает. Ещё перезалил с использованием родного окна.

Отредактировано AZJIO (25.09.2023 21:29:23)

0

25

Замабувараев написал(а):

Размер программы: 138 килобайт. Не многовато ли для программы

Видимо не видели проги на Qt и на текущих версиях дельфи / лазарус.
100 кб это не много. Можно конечно ужать, но это затраты времени которое можно использовать для других целей.

0

26

Добавил выравнивание данных по колонкам (перезалил). Обновляются только цифры, а текст справа и слева (%) статичный.
При добавлении в автозагрузку появляется диалог с возможностью удалить или перезаписать если ярлык уже существует.

Отредактировано AZJIO (25.09.2023 22:25:32)

0


Вы здесь » PureBasic - форум » PureBasic для Windows » CpuHddMem