есть функция которая вызывает нативы движка rage, решил написать сюда потому что тред по гташке мертвый.
заранее извиняюсь за шапку, не знаю как можно было понятнее описать.
ее вызов выглядит примерно так:
if (ImGui::Button("clear ped tasks"))
{
tick::thread_invoker::queue([]
{
auto ped = player::player_ped_id();
ped::clear_ped_tasks_immediatly(ped)
}
);
}
сама она выглядит вот так:
#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-ой строчке
я вообще от слова совсем не понимаю ее код, за исключением пары строк, и причину проблемы найти не могу.
буду очень благодарен если кто-то обьяснит как оно работает и что надо сделать чтобы оно работало.