Есть ли способ остановить и начать тему? Я хочу, чтобы пользователь мог остановить и запустить функцию по своему усмотрению. например:Остановить, и начать поток?
void func()
{
while (1)
{
cout << "I am a function!" << endl;
}
}
void stopfunc();
{
if (condition...)
t1.stop(); (???)
}
}
int main()
{
thread t1(func);
thread t2(stopfunc)
t1.join();
t2.join();
}
EDIT: Я попробовал то, что кто-то в комментариях предложил, это не сработало:
atomic<bool> stop_func{ false };
void toggle()
{
while (1)
{
Sleep(20);
if (GetAsyncKeyState(VK_F6))
{
stop_func = true;
}
}
}
int Func()
{
while (!stop_func)
{
HWND h = FindWindow(NULL, "....");
if (!process->Attach("..."))
return 1;
Interface::OnSetup();
Static::OnSetup();
Dynamic::OnSetup();
if (!g_pOverlay->Attach(h))
return 2;
g_pRenderer->OnSetup(g_pOverlay->GetDevice());
hFont = g_pRenderer->CreateFont("Verdana", 12, FONT_CREATE_SPRITE | FONT_CREATE_OUTLINE | FONT_CREATE_BOLD);
g_pOverlay->AddOnFrame(OnFrame);
return g_pOverlay->OnFrame();
}
}
int main()
{
thread t1(Func);
thread t2(toggle);
t1.join();
t2.join();
}
Что я делаю неправильно?
Простой способ сделать это - установить флаг и периодически проверять другой поток. Убедитесь, что вы используете атомные операции. Без какого-либо сотрудничества с остановленной нитью это невозможно в стандартном C++ и по уважительным причинам. –
Не могли бы вы уточнить, что вы подразумеваете под флагом? – michealbell
'std :: atomic stop_func {false}; void func() {while (! stop_func) {...}} void stopfunc() {stop_func = true; } ' –