Форум программистов, компьютерный форум CyberForum.ru

Инспектор динамической памяти процессов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача на удаление слов на "а" из текста http://www.cyberforum.ru/cpp/thread21179.html
:help:Срочно!!! Помогите доработать программу, которая должна проанализировать три небольших предложения составленные из слов разделённых пробелами и вывести на экран новый текст без слов начинающихся на букву "а". Сами предложения должны быть прописаны в самой программе, т.е. текст уже должен быть в тексте программы. #include <stdio.h> #include<stdlib.h> void main( ) { char s="album...
C++ Задачка с динамической памятью и вводом из файла Здраствуйте...Помогите написать любую программу с использованием динамической память и ввода из файла...на c++ версии вроде 3.1 досовский вообщем..Программа расчитана на конец первого симестра в институте..Вообщем не очень сложная...Помогите пожалуйста послезавтра экзамен по информатике =( http://www.cyberforum.ru/cpp/thread21163.html
C++ Генерация лабиринта
Люди помогите застопорился на растовлении стенки #include <iostream> #include <time.h> using namespace std; int rekursiy(int ar,int row,int col) { } void main() { srand (time(0));
C++ Составить программу, которая вставляет в список новый элемент F за каждым вхождением элемента Е
Составить программу, которая вставляет в список новый элемент F за каждым вхождением элемента Е.
C++ Программа для построения на изображении линий, квадратов http://www.cyberforum.ru/cpp/thread20635.html
Нужна программа для построения на изображении линий, квадратов (граф примитивов)Ю или литература как это реализовать. Заранее спасибо.
C++ Определить размер файла в С++ Есть ли функция для определения размера файла в С++, как скажем в Delphi или Pascal функция FileSize(var F: file)? подробнее

Показать сообщение отдельно
YurA_280784
Заблокирован
23.01.2009, 10:14     Инспектор динамической памяти процессов
Лови мой ProcsViewer(копия taskmgr, максимальное использование памяти процессом эт Working Set Peak, а текущее использование памяти Working Set. Если Working Set Peak постоянно возрастает, значит процесс жрёт память, кстати я так и увидел что сам ProcsViewer по началу жрал, пришлось повозиться с отчисткой динамически выделяемой памяти для PPERF_DATA_BLOCK. Кстати прога берёт все данные из HKEY_PERFORMANCE_DATA - т.е виртуальной части реестра.

Вобщем кидаю тебе мой класс СProcMgr.h, сам экзешник и прототип
void CProcsViewerDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
int i,j,nCount;
void *lpBuf;
char * sParam;
if(IsTimer)
{
if(tick%10 == 0){
lpBuf = lpm->GetProcessInformation(100);
for(i = 0; i < lpm->dwNumInst; i++)
{
for(j = 0; j <= lpm->nParam; j++)
{
sParam = lpm->GetOutputData(lpm->pRETDATA,j,i);
EditListItem(m_list1,sParam,i,j);
free(sParam);
}
}
nCount = m_list1.GetItemCount();
for(i; i < nCount; i++)
m_list1.DeleteItem(i);
for(j = 0; j < lpm->nParam; j++)
free((void *)lpm->pRETDATA[j]);
free(lpBuf);//Обязательно освобождать память!!!
}
}
else
KillTimer(nIDEvent);
tick++;
if(100 < tick)
tick = 0;
CDialog::OnTimer(nIDEvent);
}
(Ну как я юзаю мой класик в проге)

//Данное написать в самом начале Dlg.cpp ну или где ты там буш подключать CProcMgr.h
LPPROCMGR lpm = new CProcMgr();
bool IsTimer = false;
int tick = 0;
Усё програмировал сам!!!

Если буд вопросы по проге пиши.
Надеюсь пригодиться...

Добавлено через 1 минуту 27 секунд
Чьёрт, чёта прикрепления не отправились
Короче вот код CProcMgr.h

#ifndef CPROCMGR_H
#define CPROCMGR_H

#include <windows.h>
#include <winperf.h>
#include <stdio.h>

typedef struct tagPERFDATA
{
char *chIndex;
char *sObject;
} PERFDATA;

struct
{
UINT index;
LPTSTR name;
}
szParam [] =
{
// { 1, "Executable" },
{ 1, "ID Process" },
/* { 1, "Executable" },
// { 1024, "Virtual Bytes" },
// { 1024, "Virtual Bytes Peak" },*/
{ 1024, "Working Set" },
{ 1024, "Working Set Peak" },
{ 1, "Number of active flows" },
{ 1, "% Processor Time" },
{ 0, NULL },
};

class CProcMgr
{
public :
PERFDATA * pCOUNTER;

LPCSTR sRegPath;
LPCSTR sParam;

LPTSTR szIndex;
DWORD * dwIndex;
char ** chTITLE;
UINT nParam;
UINT * uDivider;

DWORD dwBytes;
DWORD dwNumInst;
DWORD SleepTime;
DWORD * pCPU;
DWORD Y0;
DWORD Y1;

PERFDATA ** pRETDATA;

CProcMgr();
// ~CProgMgr();
PERFDATA * ReadPerflibData(LPCSTR sRegPath, LPCSTR sParam);
LPTSTR GetPerflibDataIndex(PERFDATA * pPERFDATA, LPCSTR sObject);
LPVOID GetPerflibDataBlock(LPTSTR szIndex, DWORD &dwBytes);
PERFDATA * GetPerfInstDef(PERFDATA * pPERFDATA, LPVOID lpBuf, DWORD dwParam);
LPVOID GetProcessInformation(DWORD SleepTime);
LPTSTR GetOutputData(PERFDATA ** pRETDATA, int iParam, int iInst);
};
typedef CProcMgr *LPPROCMGR;

CProcMgr::CProcMgr()
{

sRegPath = (LPCSTR)"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009";
sParam = (LPCSTR)"Counter";
pCOUNTER = ReadPerflibData(sRegPath, sParam);
if(0 < atoi(pCOUNTER[0].chIndex))
{
szIndex = GetPerflibDataIndex(pCOUNTER,"Process");
dwBytes = 1024*sizeof(PPERF_DATA_BLOCK);
void * lpBuf = GetPerflibDataBlock(szIndex, dwBytes);
PPERF_DATA_BLOCK pdb = (PPERF_DATA_BLOCK)lpBuf;
dwNumInst = ((PPERF_OBJECT_TYPE)((PBYTE)pdb + pdb->HeaderLength))->NumInstances - 1;
pCPU = (DWORD *)malloc(dwNumInst*sizeof(DWORD));
free(lpBuf);

nParam = 0;
dwIndex = (DWORD *)malloc(sizeof(DWORD)*(nParam + 1));
while(0 < szParam[nParam].index)
{
dwIndex[nParam] = atoi(GetPerflibDataIndex(pCOUNTER,szParam[nParam].name));
dwIndex = (DWORD *)realloc((void *)dwIndex,sizeof(DWORD)*(nParam + 2));
nParam++;
}
chTITLE = new char * [nParam + 1];
uDivider = (UINT *)malloc(nParam);
chTITLE[0] = (char *)"sMODULE";

for(int i = 0; i < nParam; i++)
{
uDivider[i] = szParam[i].index;
chTITLE[i + 1] = (char *)malloc(strlen(szParam[i].name) + 1);
sprintf(chTITLE[i + 1],"%s",szParam[i].name);
//strcpy(chTITLE[i],szParam[i].name);
}
SleepTime = 100;
pRETDATA = new PERFDATA * [nParam + 1];
// GetProcessInformation(SleepTime);
}
}

PERFDATA * CProcMgr::ReadPerflibData(LPCSTR sRegPath, LPCSTR sParam)
{
int nCount = 0;
HKEY hKey ;
DWORD dwBytes;
PERFDATA * pPERFDATA = (PERFDATA *)
malloc(sizeof(PERFDATA)*(nCount + 1));
// Открываем ключ.
LONG lRes = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
sRegPath,
0,
KEY_READ,
&hKey );
if(lRes == ERROR_SUCCESS)
{
// Получаем размер счётчика.
lRes = RegQueryValueEx( hKey,
sParam,
NULL, NULL, NULL,
&dwBytes );
if(lRes == ERROR_SUCCESS)
{
// Распределяем память для буфера.
char * chBuf = (char *) malloc( dwBytes );
pPERFDATA[nCount].chIndex = (char *)malloc(MAX_PATH);
pPERFDATA[nCount].sObject = (char *)malloc(MAX_PATH);
// Получаем заголовки и счётчики.
lRes = RegQueryValueEx( hKey,
sParam,
NULL, NULL,
(LPBYTE)chBuf,
&dwBytes );
if(lRes == ERROR_SUCCESS)
{
nCount++;
pPERFDATA = (PERFDATA *)
realloc((void *)pPERFDATA,sizeof(PERFDATA)*(nCount + 1));
while(*chBuf)
{
pPERFDATA[nCount].chIndex = (char *)malloc(strlen(chBuf) + 1);
strcpy(pPERFDATA[nCount].chIndex,chBuf);
chBuf = &(*(chBuf + strlen(chBuf) + 1));
pPERFDATA[nCount].sObject = (char *)malloc(strlen(chBuf) + 1);
strcpy(pPERFDATA[nCount].sObject,chBuf);
chBuf = &(*(chBuf + strlen(chBuf) + 1));
nCount++;
pPERFDATA = (PERFDATA *)
realloc((void *)pPERFDATA,sizeof(PERFDATA)*(nCount + 1));
}

sprintf(pPERFDATA[0].chIndex,"%d",nCount);
sprintf(pPERFDATA[0].sObject,"%d",dwBytes);
// Закрываем ключ.
RegCloseKey( hKey );
}
}
}
return pPERFDATA;
}

LPTSTR CProcMgr::GetPerflibDataIndex(PERFDATA * pPERFDATA, LPCSTR sObject)
{
int ObjLen = strlen(sObject);
int nCount = atoi(pPERFDATA[0].chIndex);
char *chBuf;
for(int i = 1; i < nCount; i++)
{
if(strlen(pPERFDATA[i].sObject) == ObjLen)
if(strstr(sObject,pPERFDATA[i].sObject))
{
chBuf = pPERFDATA[i].chIndex;
break;
}
}
return chBuf;
}

LPVOID CProcMgr::GetPerflibDataBlock(LPTSTR szIndex, DWORD &dwBytes)
{
void * lpBuf = malloc(dwBytes);
while( RegQueryValueEx(HKEY_PERFORMANCE_DATA,
(LPTSTR)szIndex,
NULL,NULL,
(LPBYTE)lpBuf, &dwBytes) == ERROR_MORE_DATA )
{
dwBytes += 1024*sizeof(PPERF_DATA_BLOCK);
// Распределённая память мала;
//перераспределяем новую память.
lpBuf = realloc(lpBuf,dwBytes);
}
lpBuf = realloc(lpBuf,dwBytes);
return lpBuf;
}

PERFDATA * CProcMgr::GetPerfInstDef(PERFDATA * pPERFDATA, LPVOID lpBuf, DWORD dwParam)
{
PPERF_DATA_BLOCK pdb = (PPERF_DATA_BLOCK)lpBuf;
// Получаем PERF_OBJECT_TYPE.
PPERF_OBJECT_TYPE pot = (PPERF_OBJECT_TYPE)
((PBYTE)pdb + pdb->HeaderLength);
// Получаем объявление первого счётчика.
PPERF_COUNTER_DEFINITION pcd = (PPERF_COUNTER_DEFINITION)
((PBYTE)pot + pot->HeaderLength);
// Получаем значение индекса для dwParam
for(int i = 0; i < (int)pot->NumCounters; i++ )
{
if (pcd->CounterNameTitleIndex == dwParam)
{
dwParam = pcd->CounterOffset;
break;
}
pcd = ((PPERF_COUNTER_DEFINITION)((PBYTE)pcd + pcd->ByteLength));
}
// Получаем первый экземпляр объекта.
PPERF_INSTANCE_DEFINITION pid = (PPERF_INSTANCE_DEFINITION)
((PBYTE)pot + pot->DefinitionLength);
// Получаем имя первого процесса.
PPERF_COUNTER_BLOCK pcb = (PPERF_COUNTER_BLOCK)
((PBYTE)pid + pid->ByteLength );

pPERFDATA = (PERFDATA *)
malloc(sizeof(PERFDATA)*(pot->NumInstances - 1));

for(i = 0; i < pot->NumInstances - 1; i++ )
{
pPERFDATA[i].chIndex = (char *)((DWORD *)((PBYTE)pcb + dwParam));
pPERFDATA[i].sObject = (char *)((PBYTE)pid + pid->NameOffset);

pid = (PPERF_INSTANCE_DEFINITION)
((PBYTE)pcb + pcb->ByteLength);
pcb = (PPERF_COUNTER_BLOCK)
((PBYTE)pid + pid->ByteLength);
}
return pPERFDATA;
}

LPVOID CProcMgr::GetProcessInformation(DWORD SleepTime)
{
void * lpBuf = GetPerflibDataBlock(szIndex, dwBytes);
PPERF_DATA_BLOCK pdb = (PPERF_DATA_BLOCK)lpBuf;
dwNumInst = ((PPERF_OBJECT_TYPE)((PBYTE)pdb + pdb->HeaderLength))->NumInstances - 1;
pRETDATA[nParam] = GetPerfInstDef(pRETDATA[nParam], lpBuf, dwIndex[nParam - 1]);
pCPU = (DWORD *)realloc((void *)pCPU,dwNumInst*sizeof(DWORD));
for(int i = 0; i < dwNumInst; i++)
pCPU[i] = ((DWORD *)pRETDATA[nParam][i].chIndex)[0];
Y0 = pdb->PerfTime100nSec.QuadPart;
free((void *)pRETDATA[nParam]);
free(lpBuf);
Sleep(SleepTime);

lpBuf = GetPerflibDataBlock(szIndex, dwBytes);
pdb = (PPERF_DATA_BLOCK)lpBuf;
Y1 = ((PPERF_OBJECT_TYPE)((PBYTE)pdb + pdb->HeaderLength))->NumInstances - 1;
if(Y1 < dwNumInst)
dwNumInst = Y1;

Y1 = pdb->PerfTime100nSec.QuadPart;
for(int j = 0; j < nParam; j++)
pRETDATA[j] = GetPerfInstDef(pRETDATA[j], lpBuf, dwIndex[j]);
return lpBuf;
}

LPTSTR CProcMgr::GetOutputData(PERFDATA ** pRETDATA, int iParam, int iInst)
{
iParam--;
char *sParam = (char *)malloc(MAX_PATH);
if(iParam < 0)
sprintf(sParam,"%ls",pRETDATA[0][iInst].sObject);
else
{
DWORD dwParam = ((DWORD *)pRETDATA[iParam][iInst].chIndex)[0];
if(iParam == nParam - 1)
{
uDivider[iParam] = Y1 - Y0;
dwParam = dwParam - pCPU[iInst];
dwParam *= 100;
}
sprintf(sParam,"%d",dwParam/uDivider[iParam]);
}
return sParam;
}

#endif
 
Текущее время: 01:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru