gpt4 book ai didi

c++ - 停止,然后启动线程?

转载 作者:行者123 更新时间:2023-11-30 05:45:11 24 4
gpt4 key购买 nike

有没有办法停止和启动一个线程?我希望用户能够随意停止和启动一个功能。例如:

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();
}

编辑:我尝试了评论中某人的建议,但没有用:

    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();
}

我做错了什么?

最佳答案

没有直接、可移植的方式来启动或停止线程。

你可以通过设置一个标志来相当接近,并在/如果设置了标志时让线程产生:

class foo { 
std::atomic<bool> flag;
public:
void pause() { flag = true; }
void unpause() { flag = false; }

void operator() {
for (;;) {
if (flag) yield();
_do_other_stuff();
}
}
};

如果你真的需要线程完全停止,你可以使用native_handle获取线程的 native 句柄。然后,因为你显然是为 Windows 编写的,你可以使用你可以使用 SuspendThreadResumeThread真正挂起和恢复线程——当然,编写执行此操作的代码不可移植。

关于c++ - 停止,然后启动线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29481179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com