C++ Не работает Tick функция

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
7 Окт 2022
Сообщения
90
Реакции
9
/del
 
Последнее редактирование:
есть функция которая вызывает нативы движка rage, решил написать сюда потому что тред по гташке мертвый.
заранее извиняюсь за шапку, не знаю как можно было понятнее описать.
ее вызов выглядит примерно так:
C++:
Expand Collapse Copy
if (ImGui::Button("clear ped tasks"))
{
    tick::thread_invoker::queue([]
        {
            auto ped = player::player_ped_id();
            ped::clear_ped_tasks_immediatly(ped)
        }
    );
}

сама она выглядит вот так:
tick.hpp:
Expand Collapse Copy
#pragma once
#include <vector>
#include <sysinfoapi.h>
#include <functional>

namespace tick
{
    class thread_invoker
    {
    public:

        inline static void queue(std::function<void()> func)
        {
            funcs_to_invoke.emplace_back(std::make_pair(func, GetTickCount64()));
        }

        void on_tick()
        {
            auto current_tick = GetTickCount64();
            for (auto& funcs : funcs_to_invoke)
            {
                if (current_tick - funcs.second < 1000)
                {
                    funcs.first();
                }
            }

            funcs_to_invoke.clear();
        }
    private:
        inline static std::vector<std::pair<std::function<void()>, uintptr_t>> funcs_to_invoke;
    };

    inline thread_invoker pnative;
}

проблема состоит в том, что во время простого вызова этих нативов игру фризит на секунду за вызов одного натива.
дабы эта тема работала адекватно в сурсе валялась эта функция, и оно почему то на отрез отказывается их вызывать. при ее вызове ничего не происходит, все стопится на 14-ой строчке
я вообще от слова совсем не понимаю ее код, за исключением пары строк, и причину проблемы найти не могу.
буду очень благодарен если кто-то обьяснит как оно работает и что надо сделать чтобы оно работало.

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.

 
inline static std::vector<std::pair<std::function<void()>, uintptr_t>> funcs_to_invoke;
 
Назад
Сверху Снизу