gpt4 book ai didi

c++ - std::thread 和 std::cin.get

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:36 25 4
gpt4 key购买 nike

我有一个名为 DebugConsole 的全局变量。它使用 Alloc Console 创建一个控制台并重定向 std::cout 和 std::cin。

事情是,当控制台出现时,一切都很好。但是,当我使用 std::cin.get() 时,它会阻塞并且我的应用程序的其余部分不可点击。所以我决定线程化 std::cin.get()。当您按下某个键时,控制台会正常关闭。当我取消选中该框时,问题就来了。线程无法加入,因为 std::cin.get() 阻止它移动。因此,我必须在它响应之前先输入。这会导致我的整个应用程序卡住。

我试图做到这一点,当您按下任意键时,它会退出我的控制台,或者当您取消选中该框时,它会关闭我的控制台。

if (ButtonChecked)
{
std::cout<<"To close this window: \nRemove the checkmark from the Extract Box OR Press Any Key..\n"<<std::flush;

DebugConsole.StartThread([window]{ //create an std::thread and run the lambda in it.
std::cin.get();
DebugConsole.StopThread(); //join the thread.
DebugConsole(false, false); //close the console.
UncheckBox(DebugBox);
});
}
else
{
DebugConsole.StopThread(); //basically just joins the thread..
UncheckBox(DebugBox);
}

问题的代码在上面。知道如何实现它吗?

最佳答案

主线程(在 DebugConsole.StartThread() 函数调用之后)应该与线程进行连接 - 当然,它需要知道线程 ID,因此您可能需要 threadid = DebugConsole.StartThread(。 ..); 使其工作。

关于c++ - std::thread 和 std::cin.get,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072997/

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