Оптимизация кода \ C++

Статус
В этой теме нельзя размещать новые ответы.
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2018
Сообщения
574
Реакции[?]
251
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
День добрый. У меня такая проблемка:
Я веб разработчик и в вебе могу сделать все, что угодно. Но десктоп приложения у меня хромают (чаще всего из-за оптимизации кода).

Вот наглядный пример:
Я сделал external софт на кс, чисто для себя и из-за бесконечных циклов у меня процесс с софтом берет 30-40% от цп. Как бы камень у меня нормальный не жалуюсь, но для себя бы хотел понять, как сделать так, чтобы хавало от проца столько, сколько действительно нужно программе (не знаю как объяснить).

Glow.cpp
C++:
void glow()
{
    val.myTeam = m.readMem<int>(val.lPlayer + offset.f_team);
    val.glow_object = m.readMem<uintptr_t>(val.gameModule + offset.f_glow_object_manager);

    for (short int id = 0; id < 64; id++)
    {
        val.entity = m.readMem<uintptr_t>(val.gameModule + offset.f_entity_list + id * 0x10);

        //Смотрим, если никого нет в живых то ничего не рендерить, а если есть живые то начинаем рендерить свою тиму и противников
        if (val.entity != 0)
        {
            val.glow_index = m.readMem<int>(val.entity + offset.f_glow_index);
            val.entity_team = m.readMem<int>(val.entity + offset.f_team);

            //Ищем команду в которой находится локальный игрок, после этого делаем обводку, на свою тиму и вражескую
            if (val.myTeam == val.entity_team)
            {
                SetMyTeamGlow(val.entity, val.glow_index);
            }
            else
            {
                SetEnemyGlow(val.entity, val.glow_index);
            }
        }
    }
}
menu.cpp
C++:
while (true)
    {
        #pragma region Glow

        if (GetAsyncKeyState(VK_NUMPAD1) & 1)
        {
            toggle.glow = !toggle.glow;

            //Изменение цвета уведомления о включении
            if (toggle.glow)
            {
                SetColor(LightGreen, Black);

                //Уведомление
                std::cout << "------------------" << std::endl;
                std::cout << "| Glow: " << ((toggle.glow) ? "ON  |" : "OFF |") << std::endl;
                std::cout << "------------------" << "\n";
            }
            else
            {
                SetColor(LightRed, Black);

                //Уведомление
                std::cout << "------------------" << std::endl;
                std::cout << "| Glow: " << ((toggle.glow) ? "ON  |" : "OFF |") << std::endl;
                std::cout << "------------------" << "\n";
            }
        }
    }
Я знаю про Thread.Sleep() в шарпе, но когда и на шарпе делаю это, все равно цп грузиться.

NiceL GoGi1337 WhereIsMyShuvi Irval Помогите веберу в десктоп софте(
 
Олдфаг
Статус
Оффлайн
Регистрация
5 Июл 2017
Сообщения
2,108
Реакции[?]
1,189
Поинты[?]
0
День добрый. У меня такая проблемка:
Я веб разработчик и в вебе могу сделать все, что угодно. Но десктоп приложения у меня хромают (чаще всего из-за оптимизации кода).

Вот наглядный пример:
Я сделал external софт на кс, чисто для себя и из-за бесконечных циклов у меня процесс с софтом берет 30-40% от цп. Как бы камень у меня нормальный не жалуюсь, но для себя бы хотел понять, как сделать так, чтобы хавало от проца столько, сколько действительно нужно программе (не знаю как объяснить).

Glow.cpp
C++:
void glow()
{
    val.myTeam = m.readMem<int>(val.lPlayer + offset.f_team);
    val.glow_object = m.readMem<uintptr_t>(val.gameModule + offset.f_glow_object_manager);

    for (short int id = 0; id < 64; id++)
    {
        val.entity = m.readMem<uintptr_t>(val.gameModule + offset.f_entity_list + id * 0x10);

        //Смотрим, если никого нет в живых то ничего не рендерить, а если есть живые то начинаем рендерить свою тиму и противников
        if (val.entity != 0)
        {
            val.glow_index = m.readMem<int>(val.entity + offset.f_glow_index);
            val.entity_team = m.readMem<int>(val.entity + offset.f_team);

            //Ищем команду в которой находится локальный игрок, после этого делаем обводку, на свою тиму и вражескую
            if (val.myTeam == val.entity_team)
            {
                SetMyTeamGlow(val.entity, val.glow_index);
            }
            else
            {
                SetEnemyGlow(val.entity, val.glow_index);
            }
        }
    }
}
menu.cpp
C++:
while (true)
    {
        #pragma region Glow

        if (GetAsyncKeyState(VK_NUMPAD1) & 1)
        {
            toggle.glow = !toggle.glow;

            //Изменение цвета уведомления о включении
            if (toggle.glow)
            {
                SetColor(LightGreen, Black);

                //Уведомление
                std::cout << "------------------" << std::endl;
                std::cout << "| Glow: " << ((toggle.glow) ? "ON  |" : "OFF |") << std::endl;
                std::cout << "------------------" << "\n";
            }
            else
            {
                SetColor(LightRed, Black);

                //Уведомление
                std::cout << "------------------" << std::endl;
                std::cout << "| Glow: " << ((toggle.glow) ? "ON  |" : "OFF |") << std::endl;
                std::cout << "------------------" << "\n";
            }
        }
    }
Я знаю про Thread.Sleep() в шарпе, но когда и на шарпе делаю это, все равно цп грузиться.

NiceL GoGi1337 WhereIsMyShuvi Irval Помогите веберу в десктоп софте(
Sleep(1); в конец цикла добавь, у тебя программа из-за этого начинает брать максимум ресурсов ЦП и перевыполнять код максимальное количество раз, а этого не нужно допускать

C++:
void glow()

{

    val.myTeam = m.readMem<int>(val.lPlayer + offset.f_team);

    val.glow_object = m.readMem<uintptr_t>(val.gameModule + offset.f_glow_object_manager);



    for (short int id = 0; id < 64; id++)

    {

        val.entity = m.readMem<uintptr_t>(val.gameModule + offset.f_entity_list + id * 0x10);



        //Смотрим, если никого нет в живых то ничего не рендерить, а если есть живые то начинаем рендерить свою тиму и противников

        if (val.entity != 0)

        {

            val.glow_index = m.readMem<int>(val.entity + offset.f_glow_index);

            val.entity_team = m.readMem<int>(val.entity + offset.f_team);



            //Ищем команду в которой находится локальный игрок, после этого делаем обводку, на свою тиму и вражескую

            if (val.myTeam == val.entity_team)

            {

                SetMyTeamGlow(val.entity, val.glow_index);

            }

            else

            {

                SetEnemyGlow(val.entity, val.glow_index);

            }

        }

     Sleep(1);

    }

}
C++:
while (true)
    {
        #pragma region Glow

        if (GetAsyncKeyState(VK_NUMPAD1) & 1)
        {
            toggle.glow = !toggle.glow;

            //Изменение цвета уведомления о включении
            if (toggle.glow)
            {
                SetColor(LightGreen, Black);

                //Уведомление
                std::cout << "------------------" << std::endl;
                std::cout << "| Glow: " << ((toggle.glow) ? "ON  |" : "OFF |") << std::endl;
                std::cout << "------------------" << "\n";
            }
            else
            {
                SetColor(LightRed, Black);

                //Уведомление
                std::cout << "------------------" << std::endl;
                std::cout << "| Glow: " << ((toggle.glow) ? "ON  |" : "OFF |") << std::endl;
                std::cout << "------------------" << "\n";
            }
        }
        Sleep(1);
    }
Так-же ты можешь следить за потреблением ресурсов каждой строчки кода
1573717596629.png
 
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2018
Сообщения
574
Реакции[?]
251
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Без Sleep()
1573718445071.png
C Sleep()
1573718523699.png

Разница не шибко большая. По факту такое приложение должно брать не более 5% от цп, не так ли?
 
Олдфаг
Статус
Оффлайн
Регистрация
5 Июл 2017
Сообщения
2,108
Реакции[?]
1,189
Поинты[?]
0
Без Sleep()
Посмотреть вложение 48525
C Sleep()
Посмотреть вложение 48526

Разница не шибко большая. По факту такое приложение должно брать не более 5% от цп, не так ли?
Можешь посмотреть, сколько раз оно выполняется за 1 секунду и подогнать ближе к ФПСу КСГО, Sleep(1), Sleep(10), хоть сколько мс можешь поставить, главное, чтобы глоу работал нормально. Так-же, я же кидал скрин "Средства диагностики", ты легко можешь определить проблему с помощью этого замечательного инструмента. Не помню сколько жрет std::cout, но я бы проверил это, может проблема еще в чем-либо, это всё определяется через выше упомянутый инструмент
 
Забаненный
Статус
Оффлайн
Регистрация
21 Дек 2018
Сообщения
574
Реакции[?]
251
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Решено, спасибо гуру NiceL
1573718938903.png
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу