Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 11.12.2017
Сообщений: 96

Обновление ListIconGadget

23.03.2019, 09:48. Показов 1629. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, столкнулся с проблемой которую долго не могу решить, не могу придумать саму стратегию решения:



PureBasic
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
Structure ProcInfo :   Name.s :   File.s{#MAX_PATH} :   PID.l : EndStructure
Structure cpu_load_times : LastProcessTime.l : LastSystemTime.l : dCpuUsage.d : EndStructure
Procedure.d GetProcessCpuLoad(pid)
   
 Static NewMap clt.cpu_load_times()
 Protected pid$ = Str(pid)
 
 Protected iCores =  CountCPUs(#PB_System_CPUs)
 Protected hProcess = OpenProcess_(#PROCESS_QUERY_INFORMATION,#False,pid)
 
 If (hProcess)
    Protected CurrentProcessTime.l, CurrentSystemTime.l
    Protected ftCreationTime.FILETIME , ftExitTime.FILETIME , ftKernelTime.FILETIME , ftUserTime.FILETIME
    Protected KernelTime.ULARGE_INTEGER , UserTime.ULARGE_INTEGER
   
    If GetProcessTimes_(hProcess, @ftCreationTime, @ftExitTime, @ftKernelTime, @ftUserTime)   
        KernelTime\HighPart = ftKernelTime\dwHighDateTime
        KernelTime\LowPart = ftKernelTime\dwLowDateTime
        UserTime\HighPart = ftUserTime\dwHighDateTime
        UserTime\LowPart = ftUserTime\dwLowDateTime
 
        CurrentProcessTime = (PeekQ(@KernelTime) + PeekQ(@UserTime)) / (iCores * 100)
        CurrentSystemTime = GetTickCount_() ; use GetTickCount64() if needed
 
        If(FindMapElement(clt(), pid$)) And clt()\LastSystemTime
            clt()\dCpuUsage = (CurrentProcessTime - clt()\LastProcessTime + 0.0) / (CurrentSystemTime - clt()\LastSystemTime)
            If (CurrentSystemTime - clt()\LastSystemTime) > 3000 ; smoothing
                clt()\LastSystemTime = 0
                clt()\LastProcessTime = 0
            EndIf
        Else
            clt(pid$)\LastProcessTime = CurrentProcessTime           
            clt()\LastSystemTime = CurrentSystemTime
        EndIf
    EndIf   
   
    CloseHandle_(hProcess)
   
    ProcedureReturn clt()\dCpuUsage
 EndIf
 
 ProcedureReturn -1 ; wrong PID
EndProcedure
Procedure ProcessList(List ProcList.ProcInfo())
  Protected pe32.PROCESSENTRY32, hprocess, kernel32=0, x=0
  Protected hthSnapshot, psapilib=0, *GetModuleFileNameEx=0
  
  kernel32=OpenLibrary(#PB_Any,"kernel32.dll")
  
  If OSVersion()>=#PB_OS_Windows_Vista And kernel32
    CompilerIf #PB_Compiler_Unicode
      *GetModuleFileNameEx=GetFunction(kernel32,"QueryFullProcessImageNameW")
    CompilerElse
      *GetModuleFileNameEx=GetFunction(kernel32,"QueryFullProcessImageNameA")
    CompilerEndIf
  EndIf
  
  If *GetModuleFileNameEx=0
    psapilib=OpenLibrary(#PB_Any,"psapi.dll")
    If psapilib
      CompilerIf #PB_Compiler_Unicode
        *GetModuleFileNameEx=GetFunction(psapilib,"GetModuleFileNameExW")
      CompilerElse
        *GetModuleFileNameEx=GetFunction(psapilib,"GetModuleFileNameExA")
      CompilerEndIf
    EndIf
  EndIf
  
  pe32\dwSize = SizeOf(PROCESSENTRY32)
  ClearList(ProcList())
  
  hthSnapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS, 0)
  If hthSnapshot
    Process32First_(hthSnapshot, @pe32) 
    While Process32Next_(hthSnapshot, @pe32) 
      If AddElement(ProcList())
        ProcList()\Name = PeekS(@pe32\szExeFile)
        ProcList()\PID  = pe32\th32ProcessID
        If *GetModuleFileNameEx
          hprocess=OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ,#Null,pe32\th32ProcessID)
          If hprocess
            If *GetModuleFileNameEx
              If psapilib
                CallFunctionFast(*GetModuleFileNameEx,hprocess,#Null,@ProcList()\File,#MAX_PATH)
              Else
                x=#MAX_PATH
                CallFunctionFast(*GetModuleFileNameEx,hprocess,#Null,@ProcList()\File,@x)
              EndIf
            EndIf
            CloseHandle_(hprocess)
          EndIf
        EndIf
      EndIf
    Wend 
    CloseHandle_(hthSnapshot)
  EndIf
  
  If kernel32
    CloseLibrary(kernel32)
  EndIf
  
  If psapilib
    CloseLibrary(psapilib)
  EndIf
EndProcedure 
 Procedure process(x)
 NewList ProcList.ProcInfo()
 ;HideGadget(10,1)
ProcessList(ProcList())
 
ForEach ProcList()
  AddGadgetItem(10,-1,ProcList()\Name + Chr(10) + GetProcessCpuLoad(ProcList()\PID) + Chr(10) + Str(ProcList()\PID) +  Chr(10) + ProcList()\File) ;Str(ClientID))
;Value$ + ProcList()\Name +"," + GetProcessCpuLoad(ProcList()\PID) + "," + ProcList()\PID + "," + ProcList()\File+#CR$
Next
Delay(10000)
 
Repeat
  x=0
  NewList ProcList.ProcInfo()
  ProcessList(ProcList())
  ForEach ProcList()
    
  SetGadgetItemText(10, x, ProcList()\Name ,0) : SetGadgetItemText(10, x, Str(GetProcessCpuLoad(ProcList()\PID)) ,1) : SetGadgetItemText(10, x, Str(ProcList()\PID) ,2) : SetGadgetItemText(10, x, ProcList()\File,3)
x = x+1
Next
Delay(10000)
ForEver
EndProcedure
 
 
 
 
 
 
 
 
 
 
 
   OpenWindow(10,0,0,650,600,"ProcessList",#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_Invisible) 
        ListIconGadget(10,2,40,640,530,"Имя",120,#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect)
        ;SetGadgetFont(10,LoadFont(0,"MS Sans Serif",6) )
        AddGadgetColumn(10, 1, "LOAD", 60)
        AddGadgetColumn(10, 2, "PID", 60)
        AddGadgetColumn(10, 3, "Path", 420)
        AddGadgetColumn(10, 4, "ID", 0)
        HideWindow(10,0)
        
      CreateThread(@process(), 0)  
 
       Repeat
      Event = WindowEvent()
      ;If Event = 
    
      
      
      Delay(20) 
      
    Until Event = #PB_Event_CloseWindow
сам код типо диспечера задач, список процессов загрузка СПУ PID и путь.

процедуры рабочие все норм, но с GUI у меня возникли прблемы,
1. ListIconGadget заполняется очень долго почему не пойму, в дебагере информация моментально появляется а заполняется долго.
2. не пойму как сделать обновление информации. процессы появляются и пропадают, добавляется они с помощью AddGadgetItem а обновляются SetGadgetItemText. если все процессы остаются неизменный обновляется все нормально, но если они появляются новые или пропадают имеющиеся я не знаю как это реализовать. Подтолкните на мысль
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2019, 09:48
Ответы с готовыми решениями:

StringGadget, ListIcongadget
Подскажите кто может Недавно начал пробовать программирование вообще и на Purebasic в частности не могу решить две задачи: 1. Как...

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

Listicongadget + графика или еще как-то
Здравствуйте! Нужен совет, как можно изобразить что-то подобное на вложенной картинке. Задача такая, чтобы что-то таблицеподобное или...

6
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
24.03.2019, 07:19
на главном форуме РВ есть нужная тема
но поиск по форуму просто никакой, поэтому там же на форуме есть спец программа решающая проблему поиска
программа позволяет искать не только по форуму, а по всему инету
0
0 / 0 / 0
Регистрация: 11.12.2017
Сообщений: 96
24.03.2019, 19:02  [ТС]
спасибо за совет, если не сложно вместо тысячи слов можно 1 ссылку если вы хорошо умеете пользоваться поиском?

Добавлено через 3 часа 19 минут
касаемо скорости заполнения я нашел, а вот как после заполнения списка гаджетов (процессов) обновлять эти списки(удалять убитые процессы и добавлять вновь появивщиеся)

Добавлено через 12 минут
можно конечно очищать список и вновь его формировать, но как то все это некрасиво
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
24.03.2019, 22:00
Цитата Сообщение от error_systems Посмотреть сообщение
а вот как после заполнения списка гаджетов (процессов) обновлять эти списки
Может вам готовую программу дать, чтобы не мучились?
А то вот (автор pablov):
Вложения
Тип файла: zip ProcessViewer.zip (19.3 Кб, 16 просмотров)
0
Эксперт по электронике
6493 / 3123 / 331
Регистрация: 28.10.2011
Сообщений: 12,277
Записей в блоге: 7
24.03.2019, 23:21
Цитата Сообщение от error_systems Посмотреть сообщение
ListIconGadget заполняется очень долго почему не пойму
Потому что заполняется из другого потока.
0
Эксперт JSЭксперт HTML/CSS
2436 / 1115 / 312
Регистрация: 23.06.2011
Сообщений: 3,529
25.03.2019, 09:23
Цитата Сообщение от error_systems Посмотреть сообщение
спасибо за совет, если не сложно вместо тысячи слов можно 1 ссылку если вы хорошо умеете пользоваться поиском?
ссылку нельзя, её модеры удалят, это политика кибер форума
0
0 / 0 / 0
Регистрация: 11.12.2017
Сообщений: 96
25.03.2019, 14:29  [ТС]
В главном потоке заполняется моментально
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.03.2019, 14:29
Помогаю со студенческими работами здесь

Не могу установить обновление KB2670838 (Обновление платформы для Windows 7)
Не могу установить обновление KB2670838(Обновление платформы для Windows 7). Запускаю .msu файл, начинает устанавливаться, но в конце...

Обновление базы и ошибка: Обновление невозможно. База данных или объект доступны только для чтения.
Помогите пожалуйста! asp не может обновить базу. Про ошибку говорит Microsoft OLE DB Provider for ODBC Drivers (0x80004005) ...

Обновление свойств компонентов на обновление состояния родителя
Компонент Clock отрисовывается 500 раз. Внутри тикает таймер и когда компонент один - все ОК. Но когда их 500 (по всем временным...

Обновление релиза и обновление Типовой конфигураци
Господа, подскажите, в чем разница между обновлением Релиза и обновлением Типовой конфигурации. Как часто обновляется Релиз по сравнению с...

Обновление связанных сущностей (каскадное обновление)
Доброго времени суток. У меня возникла проблема с обновлением сущности и связанной с ней сущности. Подход к созданию бд -...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru