Другое С/С++ Вопрос - Ответ

Шурик

Активный
216
43

Шурик

Активный
216
43
Екземпляр класса должен быть глобальным или static
Попытался сделать глобальным и статическим - результата нет, всё также вылетает.
Хочу обратить внимание на то, что если я укажу th.join() после: std::thread th = test.start(""), то игра не вылетит, но к сожалению от потока не будет смысла (т.к. фризит процесс при Sleep).

UPD: Проверил на консольном приложении - успешно (но не в SF).
iSd77Pd.png
 
Последнее редактирование:

Harryss

Участник
233
26
Попытался сделать глобальным и статическим - результата нет, всё также вылетает.
Хочу обратить внимание на то, что если я укажу th.join() после: std::thread th = test.start(""), то игра не вылетит, но к сожалению от потока не будет смысла (т.к. фризит процесс при Sleep).

UPD: Проверил на консольном приложении - успешно (но не в SF).
iSd77Pd.png
Необходимость в парилке с потоком возникла с целью нормально использовать задержку?
 

Harryss

Участник
233
26
Да, но не только из-за задержки.
Если это вдруг поможет, предлагаю простой вариант избавления от этой парилки, с библиотекой thread.
C++:
const auto myTask = []()
{
    // Твой код.
    // Можно использовать Sleep и это не будет тормозить игру.
};
std::thread(myTask).detach();  //<--- Сам вызов потока
 
  • Нравится
Реакции: Шурик

Шурик

Активный
216
43
Если это вдруг поможет, предлагаю простой вариант избавления от этой парилки, с библиотекой thread.
C++:
const auto myTask = []()
{
    // Твой код.
    // Можно использовать Sleep и это не будет тормозить игру.
};
std::thread(myTask).detach();  //<--- Сам вызов потока
Хм, твой способ не подходит для моей ситуации, но за deatch огромное спасибо. На самом деле это решило мою проблему.
 

AnWu

Известный
Всефорумный модератор
4,778
5,410
Есть ли возможность менять шрифт текста для ImGui меню?
C++:
            ImGui::CreateContext();
            ImGui_ImplWin32_Init(GetActiveWindow());
            ImGui_ImplDX9_Init(SF->getRender()->getD3DDevice());
            ImGuiIO& IO = ImGui::GetIO();
            if (!bChangeFont) {
                ImFontConfig font_config;
                TCHAR path[MAX_PATH];
                HRESULT hr = SHGetFolderPathA(NULL, CSIDL_FONTS, NULL, SHGFP_TYPE_CURRENT, path);
                std::string fPath = std::string(path).append("\\arialbd.ttf");
                IO.Fonts->AddFontFromFileTTF(fPath.c_str(), 14.0f, &font_config, IO.Fonts->GetGlyphRangesCyrillic());
                smallFont = IO.Fonts->AddFontFromFileTTF(fPath.c_str(), 12.0f, &font_config, IO.Fonts->GetGlyphRangesCyrillic());
                bChangeFont = true;
            }
            ImGuiStyle* style = &ImGui::GetStyle();
у меня так
 
  • Нравится
Реакции: {cran}

Шурик

Активный
216
43
Возможно ли в registerChatCommand передать в качестве второго параметра лямбду? Но внутри неё мне нужно получить 2 переменные, которые в ней не находятся. Если да, то пожалуйста покажите пример.
 

Harryss

Участник
233
26
Возможно ли в registerChatCommand передать в качестве второго параметра лямбду? Но внутри неё мне нужно получить 2 переменные, которые в ней не находятся. Если да, то пожалуйста покажите пример.
registerChatCommand напрямую с лямбдой не работает, на основе того, что я показал ранее, с cmd работаю так
C++:
void CALLBACK cmdExample(std::string param)
{
    if (param.empty())
        return;

    const auto task = [param]() // Просто добавил param
    {
        // Код, задержки, все дела.
        int my_int = std::stoi(param); // Получение параметра функции
    };
    std::thread(task).detach();
}
 

Шурик

Активный
216
43
registerChatCommand напрямую с лямбдой не работает, на основе того, что я показал ранее, с cmd работаю так
C++:
void CALLBACK cmdExample(std::string param)
{
    if (param.empty())
        return;

    const auto task = [param]() // Просто добавил param
    {
        // Код, задержки, все дела.
        int my_int = std::stoi(param); // Получение параметра функции
    };
    std::thread(task).detach();
}
У меня нет определённой команды.
Я команды создаю уже непосредственно в самой игре и не могу сделать так как у тебя.