HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

получить время ЦП для выбранного процесса
  #1  
Старый 11.12.2009, 16:00
transserg
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
С нами: 9399214

Репутация: 52
По умолчанию получить время ЦП для выбранного процесса

привет всем.... есть задача получить список процессов и получить загрузку цп каждым процессом за последнюю секунду... в принципе все это работает и сделано... НО препод заявляет типа загрузку цп лучше считать с помощью NtQuerySystemInformation для каждого процесса но с этим проблема как? каков алгоритм? сейчас все сделано так список процессов через NtQuerySystemInformation загрузку ЦП через GetProcessTimes
но мне не оч нравится такой метод... есть ли альтернатива?
 
Ответить с цитированием

  #2  
Старый 11.12.2009, 17:25
DeaD_MoroZ
Banned
Регистрация: 03.11.2009
Сообщений: 112
С нами: 8694756

Репутация: 17
По умолчанию

Цитата:
Сообщение от transserg  
привет всем.... есть задача получить список процессов и получить загрузку цп каждым процессом за последнюю секунду... в принципе все это работает и сделано... НО препод заявляет типа загрузку цп лучше считать с помощью NtQuerySystemInformation для каждого процесса но с этим проблема как? каков алгоритм? сейчас все сделано так список процессов через NtQuerySystemInformation загрузку ЦП через GetProcessTimes
но мне не оч нравится такой метод... есть ли альтернатива?
или я совсем дурак или что то ещё... но ты сам себе противоречишь в написаном(= я 5 раз прочитал но всё равно не понял что тебе надо(и опять не в там написали... есть же тред для студентов...)
 
Ответить с цитированием

  #3  
Старый 11.12.2009, 17:29
transserg
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
С нами: 9399214

Репутация: 52
По умолчанию

DeaD_MoroZ в чем? мне надо получить загрузку цп для процесса... спомошью NtQuerySystemInformation если такое возможно..... сейчас этоже задание сделано через GetProcessTimes
 
Ответить с цитированием

  #4  
Старый 11.12.2009, 19:40
_antony
Познающий
Регистрация: 16.07.2008
Сообщений: 82
С нами: 9379631

Репутация: 142
По умолчанию

Цитата:
Сообщение от transserg  
НО препод заявляет типа загрузку цп лучше считать с помощью NtQuerySystemInformation для каждого процесса
Это в каком пту?
Код:
.text:7C835241 ; BOOL __stdcall GetProcessTimes(HANDLE hProcess, LPFILETIME lpCreationTime, LPFILETIME lpExitTime, LPFILETIME lpKernelTime, LPFILETIME lpUserTime) .text:7C835241                 public GetProcessTimes .text:7C835241 GetProcessTimes proc near
.....

   mov     edi, edi
.text:7C835243                 push    ebp
.text:7C835244                 mov     ebp, esp
.text:7C835246                 sub     esp, 20h
.text:7C835249                 push    0
.text:7C83524B                 push    20h
.text:7C83524D                 lea     eax, [ebp+var_20]
.text:7C835250                 push    eax
.text:7C835251                 push    4
.text:7C835253                 push    [ebp+hProcess]
.text:7C835256                 call    ds:NtQueryInformationProcess
 
Ответить с цитированием

  #5  
Старый 11.12.2009, 19:46
transserg
Участник форума
Регистрация: 02.07.2008
Сообщений: 132
С нами: 9399214

Репутация: 52
По умолчанию

_antony далеко не ПТУ =) прост у него привычка сбивать с толку... даже глядя в методички что есть там куча ошибок =) да и ще он как то заявил что ПРИМЕР из методичке не должен работать....
тему можно закрыть.. так как решение найдено останусь на прежнем варианте...
 
Ответить с цитированием

Определяет загрузку ЦП в % для каждого ядра
  #6  
Старый 11.12.2009, 20:07
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
С нами: 9023100

Репутация: 395


По умолчанию Определяет загрузку ЦП в % для каждого ядра

Немного не в тему но может кому пригодится.

Код:
//---------

#include "stdio.h"
#include "windows.h"

//---------

typedef DWORD (__stdcall *LPFN_NtQuerySystemInformation)(DWORD, PVOID, DWORD, PDWORD);

#define SystemProcessorPerformanceInformation 0x8

//---------

#pragma pack(push,8)

typedef struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION {
    LARGE_INTEGER IdleTime;
    LARGE_INTEGER KernelTime;
    LARGE_INTEGER UserTime;
    LARGE_INTEGER DpcTime;
    LARGE_INTEGER InterruptTime;
    ULONG InterruptCount;
} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION,
*PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;

#pragma pack(pop)

//---------

int main(int argc, char* argv[]) {

	SYSTEM_INFO   systeminfo;
	unsigned long bytesreturned;

	SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION spi_old[32];
	memset(spi_old,0,sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)*32);

	SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION spi[32];
	memset(spi,0,sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)*32);

	LPFN_NtQuerySystemInformation ntquerysysteminformation =(LPFN_NtQuerySystemInformation) GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation");

	if(!ntquerysysteminformation) {

	  printf("\n*** no ntquerysysteminformation api?.. bugger");
	  return -1;
	}

	GetSystemInfo(&systeminfo);

	printf("\n[i] Processor Count: %d\n",systeminfo.dwNumberOfProcessors);

	ntquerysysteminformation(SystemProcessorPerformanceInformation,spi_old, (sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)*systeminfo.dwNumberOfProcessors),&bytesreturned);

	Sleep(500);

	ntquerysysteminformation(SystemProcessorPerformanceInformation,spi, (sizeof(SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION)*systeminfo.dwNumberOfProcessors),&bytesreturned);

	for(int cpuloopcount = 0; cpuloopcount < systeminfo.dwNumberOfProcessors; cpuloopcount++) {

		BYTE cpuusage = (BYTE) (100 - (((spi[cpuloopcount].IdleTime.QuadPart - spi_old[cpuloopcount].IdleTime.QuadPart) * 100) /  \
		((spi[cpuloopcount].KernelTime.QuadPart +  spi[cpuloopcount].UserTime.QuadPart) - (spi_old[cpuloopcount].KernelTime.QuadPart + spi_old[cpuloopcount].UserTime.QuadPart))));

		printf("\n[i] CPU %02d: = %0d%%",cpuloopcount, cpuusage);

	}
  return 0;
}
 
Ответить с цитированием

  #7  
Старый 11.12.2009, 21:24
DeaD_MoroZ
Banned
Регистрация: 03.11.2009
Сообщений: 112
С нами: 8694756

Репутация: 17
По умолчанию

Цитата:
Сообщение от transserg  
_antony далеко не ПТУ =) прост у него привычка сбивать с толку... даже глядя в методички что есть там куча ошибок =) да и ще он как то заявил что ПРИМЕР из методичке не должен работать....
тему можно закрыть.. так как решение найдено останусь на прежнем варианте...
видел много примеров из методичек которые ни фига не работают(=
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
МикроДжоинер для начинающих ReanimatoR Статьи 23 02.01.2010 15:07



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...