Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> диспетчер задач 
:(
    Опции темы
qwerty1122
Дата 21.10.2013, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.10.2013

Репутация: нет
Всего: нет



всем привет)поставленная мне задача -> написать диспетчер задач в виде : 
Код

procces1  i%
procces2  j%
...
 
подскажите в какую сторону начинать "копать"?может у кого есть свой личный диспетчер задач?или мож где видали в инете данное решение проблемы)) 
PM MAIL   Вверх
EgoBrain
Дата 22.10.2013, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Цитата(qwerty1122 @  21.10.2013,  18:27 Найти цитируемый пост)
подскажите в какую сторону начинать "копать"?

Копать естественно в сторону API OS, видимо Win32API в твоём случае, функции CreateToolhelp32Snapshot() - для получения списка процессов, Process32First() и Process32Next() - для перебора процессов.


Цитата(qwerty1122 @  21.10.2013,  18:27 Найти цитируемый пост)
может у кого есть свой личный диспетчер задач?

Диспетчер не писал, но делал программу для перезапуска упавшего сервера CS smile))

Если кто расскажет как в постах форума спойлеры делать, выложу код smile
PM MAIL ICQ Skype   Вверх
qwerty1122
Дата 29.10.2013, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.10.2013

Репутация: нет
Всего: нет



Цитата(EgoBrain @ 22.10.2013,  05:40)
Цитата(qwerty1122 @  21.10.2013,  18:27 Найти цитируемый пост)
подскажите в какую сторону начинать "копать"?

Копать естественно в сторону API OS, видимо Win32API в твоём случае, функции CreateToolhelp32Snapshot() - для получения списка процессов, Process32First() и Process32Next() - для перебора процессов.


Цитата(qwerty1122 @  21.10.2013,  18:27 Найти цитируемый пост)
может у кого есть свой личный диспетчер задач?

Диспетчер не писал, но делал программу для перезапуска упавшего сервера CS smile))

Если кто расскажет как в постах форума спойлеры делать, выложу код smile

вот последовал твоему совету что использовать,кое какие данные смог вывести,но вот не пойму какой функцией вывести именно проценты загруженности ЦП,подскажи функции)
Код

#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <conio.h>

int main()
{
    // Делаем "снимок" процессов
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    PROCESSENTRY32 pe;    //хранит информацию о найденом процессе
    if (Process32First(hSnapshot, &pe))    //Поиск первого процесса в снимке
    {
        printf("Name obraz                PID   Kol-vo nitei      Prioritet         PID family");
        printf("========================= ===== ================= ================= ============");
        do    
        {
            if (!pe.th32ProcessID) continue;    // Пропуск [System process]
            HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, pe.th32ProcessID);    //Получаем дескриптор процесса
            char cPriority[18];
            switch (GetPriorityClass(hProcess))    //Получае приоритет процесса
            {
                case HIGH_PRIORITY_CLASS:
                    strcpy(cPriority, "Vishe srednego");
                    break;
                case IDLE_PRIORITY_CLASS:
                    strcpy(cPriority, "Nizkii");
                    break;
                case NORMAL_PRIORITY_CLASS:
                    strcpy(cPriority, "Srednii");
                    break;
                case REALTIME_PRIORITY_CLASS:
                    strcpy(cPriority, "Realnogo vremeni");
                    break;
                default:
                    strcpy(cPriority, "Visokii");
            }
            CloseHandle(hProcess);
            //Выводим информацию о процессе
            printf("%25s%6d%18d%18s%12d\n", pe.szExeFile, pe.th32ProcessID,
                   pe.cntThreads, cPriority, pe.th32ParentProcessID);
            
        }
        while (Process32Next(hSnapshot, &pe));    //Поиск следущего процесса в снимке
    }
    else printf("Ne poluchilos' poluchit' informaciu");
    CloseHandle(hSnapshot);
    system("PAUSE");
    return 0;
    getch();
}                                                                                                                            


PM MAIL   Вверх
vinter
Дата 29.10.2013, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Посмотри Process hacker, его исходники доступны


--------------------
Мой блог
PM MAIL WWW   Вверх
qwerty1122
Дата 29.10.2013, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.10.2013

Репутация: нет
Всего: нет



Цитата(vinter @ 29.10.2013,  12:54)
Посмотри Process hacker, его исходники доступны

как бы хотелось чтобы решение данного вопроса выглядило намного проще чем на данной ссылке,уж очень замысловато там сделано
PM MAIL   Вверх
qwerty1122
Дата 29.10.2013, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.10.2013

Репутация: нет
Всего: нет



ну вдруг я не правильно обьясняюсь,то на данной картинке помеченно что мне необходимо получать(какие столбцы) в результате работы программы 

Присоединённый файл ( Кол-во скачиваний: 19 )
Присоединённый файл  Безымянный.JPG 43,67 Kb
PM MAIL   Вверх
EgoBrain
Дата 30.10.2013, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



qwerty1122, позволь мне поискать за тебя?

MSDN тыц NtQuerySystemInformation
SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION structure.

PM MAIL ICQ Skype   Вверх
qwerty1122
Дата 3.11.2013, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.10.2013

Репутация: нет
Всего: нет



ну вот так маленько продолжил
Код
//Менеджер процессов

#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <conio.h>

int main()
{
    // Делаем "снимок" процессов
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    FILETIME ftCreation,
             ftExit,
             ftKernel,
             ftUser;
    PROCESSENTRY32 pe;    //хранит информацию о найденом процессе
    if (Process32First(hSnapshot, &pe))    //Поиск первого процесса в снимке
    {
        printf("Name obraz                PID   Kol-vo nitei      Prioritet         PID family");
        printf("========================= ===== ================= ================= ============");
        do    
        {
            if (!pe.th32ProcessID) continue;    // Пропуск [System process]
            HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, pe.th32ProcessID);    //Получаем дескриптор процесса
            GetProcessTimes(hProcess,&ftCreation,&ftExit,&ftKernel,&ftUser);//получаем системные времена процесса
            char cPriority[18];
            switch (GetPriorityClass(hProcess))    //Получаем приоритет процесса
            {
                case HIGH_PRIORITY_CLASS:
                    strcpy(cPriority, "Vishe srednego");
                    break;
                case IDLE_PRIORITY_CLASS:
                    strcpy(cPriority, "Nizkii");
                    break;
                case NORMAL_PRIORITY_CLASS:
                    strcpy(cPriority, "Srednii");
                    break;
                case REALTIME_PRIORITY_CLASS:
                    strcpy(cPriority, "Realnogo vremeni");
                    break;
                default:
                    strcpy(cPriority, "Visokii");
            }
            CloseHandle(hProcess);
            //Выводим информацию о процессе
            printf("%25s%6d%18d%18s%12d\n", pe.szExeFile, pe.th32ProcessID,
                   pe.cntUsage, cPriority, pe.th32ParentProcessID);
            
        }
        while (Process32Next(hSnapshot, &pe));    //Поиск следущего процесса в снимке
    }
    else printf("Ne poluchilos' poluchit' informaciu");
    CloseHandle(hSnapshot);
    system("PAUSE");
    return 0;
    getch();
}                                                                                                                                    //setprocessworkingsetsize (getcurrentprocess, $ffffffff, $ffffffff);

вот я правильно воспользовался GetProcessTimes?т.е теперь мне необходимо взять ftUser и поделить на ftKernel и домножить на 100 чтобы получить загрузку процесса но перед этим "перевести" время?
PM MAIL   Вверх
qwerty1122
Дата 3.11.2013, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 20.10.2013

Репутация: нет
Всего: нет



вот подправил еще свой код,и вроде как мне кажется получилось получить загруженность цп...но не могли бы вы как знатоки оценить верность данного кода
Код

//Менеджер процессов

#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>

using namespace std;

int main()
{
    // Делаем "снимок" процессов
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    FILETIME ftCreation,
             ftExit,
             ftKernel,
             ftUser;
    SYSTEMTIME stCreation,
               stExit,
               stKernel,
               stUser;
    PROCESSENTRY32 pe;    //хранит информацию о найденом процессе
    if (Process32First(hSnapshot, &pe))    //Поиск первого процесса в снимке
    {
        printf("Name obraz                PID   Kol-vo nitei      Prioritet         PID family");
        printf("========================= ===== ================= ================= ============");
        do    
        {
            if (!pe.th32ProcessID) continue;    // Пропуск [System process]
            HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, pe.th32ProcessID);    //Получаем дескриптор процесса
            GetProcessTimes(hProcess,&ftCreation,&ftExit,&ftKernel,&ftUser);//получаем системные времена процесса
            /////
            FileTimeToSystemTime(&ftCreation, &stCreation);
            FileTimeToSystemTime(&ftExit, &stExit);
            FileTimeToSystemTime(&ftUser, &stUser);
            FileTimeToSystemTime(&ftKernel, &stKernel); 
//            cout<<"creation time   -> "<<stCreation.wHour<<" Hour "<<stCreation.wMinute<<" Min "
//                <<stCreation.wSecond<<" Sec "<<stCreation.wMilliseconds<<" mSec "<<endl; 
            int now=((double)stUser.wHour*3600.0+
                    (double)stUser.wMinute*60.0+
                    (double)stUser.wSecond+
                    (double)stUser.wMilliseconds)/1000.0;
            int noq=((double)stKernel.wHour*3600.0+
                    (double)stKernel.wMinute*60.0+
                    (double)stKernel.wSecond+
                    (double)stKernel.wMilliseconds)/1000.0;
            cout<<"->"<<now<<"  ->"<<noq<<endl;
            //float cpu=(now/noq)*100;
            //cout<<"->"<<cpu<<endl;
            /////
            //int MS = ((*((ULONGLONG*)&ftUser)) / (*((ULONGLONG*)&ftKernel)))*100;
            char cPriority[18];
            switch (GetPriorityClass(hProcess))    //Получаем приоритет процесса
            {
                case HIGH_PRIORITY_CLASS:
                    strcpy(cPriority, "Vishe srednego");
                    break;
                case IDLE_PRIORITY_CLASS:
                    strcpy(cPriority, "Nizkii");
                    break;
                case NORMAL_PRIORITY_CLASS:
                    strcpy(cPriority, "Srednii");
                    break;
                case REALTIME_PRIORITY_CLASS:
                    strcpy(cPriority, "Realnogo vremeni");
                    break;
                default:
                    strcpy(cPriority, "Visokii");
            }
            CloseHandle(hProcess);
            //Выводим информацию о процессе
            printf("%25s%6d%18d%18s%12d\n", pe.szExeFile, pe.th32ProcessID,
                   pe.cntUsage, cPriority, pe.th32ParentProcessID);            
        }
        while (Process32Next(hSnapshot, &pe));    //Поиск следущего процесса в снимке
    }
    else printf("Ne poluchilos' poluchit' informaciu");
    CloseHandle(hSnapshot);
    system("PAUSE");
    return 0;
    getch();
}                                                                                                                                    //setprocessworkingsetsize (getcurrentprocess, $ffffffff, $ffffffff);


PM MAIL   Вверх
DarthTon
Дата 5.11.2013, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 7.2.2009

Репутация: нет
Всего: 6



Касательно pe.cntUsage - "This member is no longer used and is always set to zero". Это из MSDN. И судя по шапке таблицы 
Код
printf("Name obraz                PID   Kol-vo nitei      Prioritet         PID family");
 вместо pe.cntUsage должно быть pe.cntThreads.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3132 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.